Rxjs 阻止订阅中的订阅
Rxjs prevent subscribe in subscribe
我有一组对象。我需要获取 ids 数组,然后调用 2 个 API,然后关闭模态 window.
我的代码是:
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
吗?
使用 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();
);
可以找到有关 switchMap 运算符的更多信息 here。
您可以使用 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();
});
请注意,仅当所有内部可观察对象都完成时,生成的可观察对象才会发出。
我有一组对象。我需要获取 ids 数组,然后调用 2 个 API,然后关闭模态 window.
我的代码是:
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
吗?
使用 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();
);
可以找到有关 switchMap 运算符的更多信息 here。
您可以使用 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();
});
请注意,仅当所有内部可观察对象都完成时,生成的可观察对象才会发出。