【发布时间】:2018-05-09 07:28:03
【问题描述】:
在我的情况下,首先可以并行执行多个请求,在这些请求完成后,将发送另一个请求与先前的结果,伪代码如下所示
let uploads$ = [obs1$, obs2$, obs3$];
Observable.forkJoin(uploads$).mergeMap(
res => {
// never get called if uploads$ = []
let data = someCalculation(res);
return this.http.post('http://endpoint/api/resource', data);
}
).subscribe(
res => {
}
);
如果uploads$ = [],内部的mergeMap永远不会被调用。
有人可以帮忙吗?我在 RxJS 5.4
【问题讨论】:
-
您可以简单地设置一个
if条件来检查uploads$是否为空,如果是,您将不会使用forkJoin,而是直接订阅this.http.post。 -
嗨@martin,你的想法是一个解决方案,我仍然想知道我们不能用forkJoin合并Map,但是forkJoin确实返回Observable
-
问题是
forkJoin在其所有源 observable 发出至少一项且全部完成时发出。由于uploads$是空的,forkJoin将永远不会发出任何东西。您也可以在前面添加一个虚拟的 observablelet uploads$ = [Observable.of(null), obs1$, ...];然后忽略它,但这似乎很糟糕(这将保证每次至少有一个 observable)。 -
一个虚拟的
Observable.of(null)可以让我的代码简单一点,谢谢@martin,节省了我的时间!