首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在抛出错误后保持可观测流存活

在抛出错误后保持可观测流存活
EN

Stack Overflow用户
提问于 2017-03-14 18:33:55
回答 1查看 1.6K关注 0票数 1

想知道如何在不终止流的情况下将错误从可观测到订阅者的错误函数中抛出

例如,当结果是404或任何其他我捕捉到的错误并在流中抛出错误时,进行http调用。这将导致流终止并在订阅服务器中输入err功能块。

但是,是否有一种方法可以捕获和保持流打开,并将值传递给订阅服务器中的错误块。这是为了处理在订户中而不是在流中的所述404错误。用于进行错误处理和基于错误的UI更改。

使用代码更新:我有一个订阅者,如下所示:

代码语言:javascript
运行
复制
this.blahService.getSomething(id)
  .subscribe((response: Response) =>{

      this.cancelBtnText= 'Cancelled';
      this.canCancel = false;


    },
    err =>{
      console.log('ERRROR:::', err);
    });

像这样的主题:

代码语言:javascript
运行
复制
return this.http.get(this.config.apiEndpointUrl, this.options)
  .map((r: Response) => <blah>r.json())
  .catch((error: any) => {
    console.error('A friendly error occurred', error);
    return Observable.throw(error.message || error);
  });

在http错误上,这将导致调用catch函数。但是,当我抛出错误时,这将终止流及其所有订阅者,因此,下次事件来调用服务时,我的订阅服务器将不再侦听它,并且完全取消订阅,因此不会将任何信息发送回订阅。

当我在服务中将throw更改为.empty()时,这会发生变化,因为这不会终止流,但现在不再调用订阅服务器中的error函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-22 22:02:15

我添加了这段代码来说明订阅和错误处理实际上是如何工作的。

默认情况下,订阅(或管道)将保持对下一个http请求的完整等待(侦听),即使出现错误。

如果将订阅分配给一个变量,则可以取消订阅它。是不是推荐的做法..。

这个用例完全是假设的,但显示了如何通过代码停止订阅。

默认的RxJS学科是停止错误的另一种方式。

主题不是可重用的:在RxJS中,主题不能被重用。也就是说,当一个主题完成或错误时,就不能再使用它了。如果您试图处理由于调用了一个完整或错误方法而关闭的主题,它将默默地忽略通知。如果您希望主题在完成有用之后大声地、愤怒地出错,那么您可以直接在Subject实例本身上调用unsubscribe。

代码语言:javascript
运行
复制
import { Subscription } from "rxjs/Subscription";
...
export myComponent implements ngOnInit {
  sub: Subscription;
  records : DomainClz[];


  constructor(private domainService:DomainService) {}

  onInit() {
     // assumes getRecords returns Observable<DomainClz[]>
     // ie it chains map((resp:Response )to resp.json()) to http.get()
     this.sub = this.domainService.getRecords().
       subscribe(records => { this.records = records) },
                 error =>   { console.error(error)    }
       );
  }

  cancel() {
    this.sub.unsubscribe()
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42793905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档