我有一个对象数组。我需要获取包含id的数组,然后调用2个API,然后关闭模式窗口。
我的代码是:
from(this.alerts)
.pipe(map(alert => alert._id))
.subscribe(alertIds => zip(
this.alertApi.someCall1(alertIds, ...),
this.alertApi.someCall2(alertIds, ...),
).subscribe(() => {
this.activeModal.close();
}),
);
您对防止在subscribe
中使用subscribe
有什么想法吗?
答案 0 :(得分:1)
使用switchMap
rxjs运算符来避免嵌套订阅。
from(this.alerts)
.pipe(
map(alert => alert._id),
switchMap(alertIds => zip(
this.alertApi.someCall1(alertIds, ...),
this.alertApi.someCall2(alertIds, ...)
))
)
.subscribe(() => {
this.activeModal.close();
);
有关here的详细信息,请参见{{3}}。
答案 1 :(得分:1)
您可以使用与forkJoin
和Promise.all
类似的switchMap
。
See also: the RxJS docs, specifically example 6, which is similar to your situation.
from(this.alerts)
.pipe(
switchMap(alert =>
forkJoin(
this.alertApi.someCall1(alert._id),
this.alertApi.someCall2(alert._id)
)
)
)
).subscribe(() => {
this.activeModal.close();
});
请注意,只有在所有内部可观测值完成后,才会产生结果可观测值。