我想调用两个可观察对象,第二个在第一个之后调用。
我有一个先订阅的可观察对象。 然后我希望第二个可观察对象嵌套在第一个可观察对象中。
我想在下面合并这两个订阅:
this.serviceA.getData()
.takeUntil(destroyed$)
.subscribe(item => {
});
this.serviceB.getData()
.takeUntil(destroyed$)
.subscribe(item => {
});
这是我展示我想做的事情的尝试(更新)
destroyed$: Subject<any> = new Subject<any>();
ngOnInit(): void {
this.serviceA.getData
.takeUntil(this.destroyed$)
.concatMap(dataA => {
this.myDataA= dataA;
return this.serviceB.getData;
})
.takeUntil(this.destroyed$)
.subscribe(dataB => {
this.myDataA.forEach(item => {
item.visible = dataB.find(o => o.id === item.label).isVisible;
});
});
};
ngOnDestroy(): void {
this.destroyed$.next(true);
this.destroyed$.complete();
};
目的是在第一个订阅之后调用第二个嵌套订阅,因为在第二个订阅中需要来自第一个订阅者的数据
最佳答案
接受的答案不正确。 forkJoin
将同时订阅两个 Observables,而您希望先订阅第一个,然后在它完成订阅第二个。
这通常是使用 concatMap
完成的运算符(operator):
this.serviceA.getData()
.concatMap(response => this.serviceB.getData())
.subscribe(...)
如果你想结合这两个响应,可以在 serviceB.getData()
之后使用 map
。
this.serviceA.getData()
.concatMap(responseA => this.serviceB.getData()
.map(responseB => /* combine responseA and responseB */ ))
.subscribe(...)
关于angular - 我想调用两个可观察对象,第二个在 Angular2 中的第一个之后调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46748750/