Angular RXJS-观测链中的错误处理

Angular RXJS-观测链中的错误处理,angular,rxjs,Angular,Rxjs,我刚刚学会了不嵌套订阅,因此我使用switchMapTo作为在完成前一步后开始每个后续步骤的方法: e、 g 我现在不清楚的是,如何以简洁的方式集成错误处理,以便在链中任何位置遇到问题时向outerStream发送错误信号 我已尝试将以下内容附加到第一个 .catch(e => { return Observable.of<any>([]); }); .catch(e=>{ ([])的可观测收益率; }); 然而: 我是否应该将此附加到每个

我刚刚学会了不嵌套订阅,因此我使用switchMapTo作为在完成前一步后开始每个后续步骤的方法:

e、 g

我现在不清楚的是,如何以简洁的方式集成错误处理,以便在链中任何位置遇到问题时向outerStream发送错误信号

我已尝试将以下内容附加到第一个

    .catch(e => {
        return Observable.of<any>([]);
    });
.catch(e=>{
([])的可观测收益率;
});
然而:

  • 我是否应该将此附加到每个开关映射到?或者我可以在一个地方管理它

  • 返回([])的可观察目标是什么serve-我是否从这里调用我的外流上的error方法

  • 我还没有弄清楚如何在一个人抛出错误时立即停止事件链——我该怎么做


谢谢你的帮助

首先,您应该在observable上链接操作符,而不是每次调用
switchMapTo
时都创建一个新常量。然后你得到这个

this.retrieveAnnualLeaveVariables()
    .switchMapTo(this.initialise())
    .switchMapTo(this.retrieveData())
    .switchMapTo(this.accumulateAnnualLeaveRecords())
    .subscribe(() => outerStream.next(someResults))
然后,如果您有此功能,您可以在订阅之前添加
catch
。 在
catch
中,您可以将新的“回退”值返回为可观察值、空可观察值或抛出另一个错误

如果要停止该链,则应通过
Observable.empty()
返回一个空的Observable。如果您返回此值,则Observable将在不调用给定subscribe函数的情况下完成

结果:

this.retrieveAnnualLeaveVariables()
    .switchMapTo(this.initialise())
    .switchMapTo(this.retrieveData())
    .switchMapTo(this.accumulateAnnualLeaveRecords())
    .catch(() => Observable.empty())
    .subscribe(() => outerStream.next(someResults))

我写了一个答案,但我还有一个问题要问你。您从哪里获得
someResults
以及
switchMapTo
操作符中的函数返回什么。我采纳了您的建议,避免使用多个常量-谢谢。我一直在测试这一点,在我看来,switchMapTo并没有等待它的前身的完成,而switchMap则是-我需要代码来运行一个步骤,完成,然后进入下一步,所以我认为我需要switchMap我已经成功地完成了错误报告-谢谢。非常感谢您抽出时间回复。
this.retrieveAnnualLeaveVariables()
    .switchMapTo(this.initialise())
    .switchMapTo(this.retrieveData())
    .switchMapTo(this.accumulateAnnualLeaveRecords())
    .catch(() => Observable.empty())
    .subscribe(() => outerStream.next(someResults))