【发布时间】:2020-02-26 00:08:30
【问题描述】:
我有一个启动 Observable 的按钮,然后我订阅结果并嵌套我有一个依赖于之前的 Observable 结果的订阅。
this.getData(params).subscribe(result => {
// Make some first level process
console.log('[Outter Execution]: ',result);
this.getInnerData(result).subscribe(res => {
// Make some inner level process
console.log('[Inner Execution]: ',res);
});
});
取决于用户的点击速度,顺序不一样:
//User click slowly
[Outer Execution]
[Inner Execution]
[Outer Execution]
[Inner Execution]
//User start clicking quickly
[Outer Execution]
[Inner Execution]
[Outer Execution]
[Inner Execution]
[Outer Execution]
[Outer Execution]
[Outer Execution]
[Inner Execution]
[Inner Execution]
[Inner Execution]
[Outer Execution]
[Inner Execution]
[Outer Execution]
[Inner Execution]
如您所见,如果嵌套订阅耗时较长,并且用户再次点击内订阅未解决,则在解决内执行之前,第一个[Outer Execution]消息被注销。一段时间后,解决了之前长时间的内部订阅,并返回了记录的消息。
我尝试使用 switchMap 和 mergeMap 运算符但没有成功。
[已编辑]:我需要的功能,是作为一个块执行,并且需要在第一次执行完成后执行下一个外部执行(外部和内部订阅)。
【问题讨论】:
-
问题和预期行为是什么?
-
我需要同时执行(外部和内部),并且需要在第一次完整执行后执行下一个外部执行(外部和内部订阅)
-
您在使用 switchMap 时走在了正确的轨道上。在订阅中拥有订阅通常不是一个好主意,因为很难管理订阅并确保它们被正确取消订阅。
标签: rxjs nested observable subscription