【发布时间】:2021-06-28 14:25:32
【问题描述】:
我有一个合并的 observable 流,
const nextClickHandler$ = merge(doA$, doB$, doC$),
do A$/B$/C$ 是可观察的,它发出 HTTPRequest 或执行一些副作用,它们在一些互斥条件下运行,其中 doA$/doB$/doC$ 处于活动状态并执行网络调用/副作用。
用例是,在单击下一步按钮时,执行 A/B/C,如果我在单击下一步之前订阅它,我将面临如何订阅此合并的 observable 的问题,即
ngOnInit(){
this.nextClickHandler$.subscribe()
}
这将急切地评估那些互斥的条件并执行,甚至无需单击下一步,
我尝试点击 goForward 订阅:
goForward(): void {
if (this.getCurrentStep() == 1) {
if (this.validateForm()) {\
//performs side-effects for either A$/B$/C$
this.nextClickHandler$.subscribe();
}
return;
}
但是现在,当我再次进入步骤 I 时,它不会等待点击下一步,因为它是一个长期订阅,它只是急切地执行行为,这不是我想要的,我想要的它们仅在单击下一步时才延迟执行,我尝试了 take(1) 但这并不能解决问题,我该如何实现?
【问题讨论】:
-
问题:当您在
goForward()中订阅时,它是否有效?所以你的问题是你想在他们回去时取消订阅? -
我绝对可以这样做,回去时我可以取消订阅,当我在
goForward()订阅时它确实有效,但是有没有比手动管理订阅更好的方法,我不喜欢每次点击下一个就创建订阅的想法。 -
可能有更好的方法。如果不了解您的流程,很难说。您可能有一个
currentStep$可观察对象,它在内部使用switchMap()订阅与每个步骤相关的任何可观察对象。如果您分享更多详细信息/代码,我可以详细说明。如果您可以将其放在StackBlitz 中,那将更容易为您提供帮助。 :-)
标签: angular typescript rxjs observable rxjs6