【发布时间】:2019-05-09 17:13:02
【问题描述】:
我发现了一个我正在努力弄清楚的行为,但我确实迷失了思路。
当前工作可观察到的是:
Observable
.merge(this.eager$, this.lazy$)
.map(() => this.buildURL())
.switchMap(url =>
this.service.getItemsFromSservice(url)
.map(response => this.buildPage(response))
.catch(() => Observable.of(pojo.Page.EMPTY))
);
我的意思是,当由于 http 通信错误引发异常时,嵌套的.catch(...) 会拾取异常并返回一个空的Page 并且订阅继续进行而没有任何问题。
但是,如果我将嵌套的 .map(...).catch(...) 移动到“主线”链中,订阅不起作用:
Observable
.merge(this.eager$, this.lazy$)
.map(() => this.buildURL())
.switchMap(url => this.service.getItemsFromSservice(url))
.map(response => this.buildPage(response))
.catch(() => Observable.of(pojo.Page.EMPTY)
);
使用上述代码,当引发 http 错误时,订阅将终止。 为什么?
地点:
this.eager$ = Rx.Observable.fromEvent(this.searchButton, 'click');
this.lazy$ = Rx.Observable.fromEvent(this.lazyButton, 'click');
【问题讨论】:
-
如我的另一个答案stackoverflow.com/questions/56041453/… 所示,在嵌套捕获中,我没有返回错误,因此流继续。如果我返回一个错误,即使在那种情况下它也会停止。 当您返回 Observable.of(pojo.Page.EMPTY) 时,这是成功的,如果您返回 Observable.throw(pojo.Page.EMPTY) 您的流将停止了
标签: angular typescript rxjs