【发布时间】:2018-11-04 11:51:07
【问题描述】:
第二个concatMap 没有被调用。
this.apiService.get()
.pipe(
concatMap((data: MyModel) => {
if (data) {
// the following returns a MyModel Observable
return this.apiService.update(data);
} else {
return empty();
}
}),
concatMap((data: MyModel) => this.apiService.update(this.myOtherData))
)
.subscribe(data => log('completed'));
有什么想法吗?
【问题讨论】:
-
嗯,第一个有时返回空。如果第一个 concatMap 没有发出任何内容,则不会触发第二个 concatMap。它也可能被错误调用。您是否调试过代码以了解发生了什么?
-
有趣,我本以为会有与 OP 相同的行为
-
@JBNizet 第一个API调用返回
undefined,表示数据不存在。然后第一个concatMap进入empty()例程。你是说因为empty(),第二个永远不会被触发? -
是的。 concatMap 的文档说:“一个 Observable,它发出将投影函数(和可选的不推荐使用的 resultSelector)应用于源 Observable 发出的每个项目的结果”(强调我的)。如果源 observable 没有发出,则传递给 concatMap() 的回调函数永远不会被调用。顺便说一句,它的
data参数的值是什么,因为没有数据被发出? -
标签: angular rxjs observable concatmap