避免嵌套订阅并将值传递给错误处理程序

时间:2018-02-13 03:01:17

标签: javascript angular rxjs

在将对象传递给另一个Observable之前,是否可以从Subject更改发射值的属性?例如:

this.subscriptions.push(this.myService.mySubject.subscribe(value => {
    value.property = true;
    this.subscriptions.push(this.myOtherService.myMethod(value.propertyTwo).subscribe(value => {
    // do things with value
    });
}, (error) => {
    // how can I still access said value in the error handler?
});

我将订阅推送到私人订阅数组,以便我可以在ngOnDestroy中取消订阅。在这种情况下,我想摆脱嵌套订阅,并想知道是否可以这样做?

另外,我如何仍然可以访问订阅的错误处理程序中的value变量?

由于

1 个答案:

答案 0 :(得分:1)

使用switchMap将它们链接起来,并使用catch处理错误。在编写良好的可观察链中,通常不需要很多订阅

this.subscriptions.push(this.myService.mySubject.switchMap(value => {
value.property = true;
return this.myOtherService.myMethod(value.propertyTwo)})
.catch(e=>Observable.of(e)).subscribe())