Promise.all与RxJS Observables的行为?

在Angular 1.x中,我有时需要做出多个http请求,并对所有的响应进行处理。 我将所有的承诺放在一个数组中,并调用Promise.all(promises).then(function (results) {...})

Angular 2的最佳实践似乎指向使用RxJS的Observable来代替http请求中的承诺。 如果我有两个或更多不同的Observable从http请求创build,他们相当于Promise.all()

模拟Promise.all的更直接的select是使用forkJoin操作符(它并行地启动所有可观察对象并join最后一个元素):

  • 文件
  • 相关链接:Cf. RxJS:concat三个承诺,区分结果

有点超出范围,但如果有帮助,关于链接承诺的主题,你可以使用一个简单的flatMap :Cf. RxJS承诺构成(传递数据)

forkJoin也能正常工作,但是我更喜欢combineLatest,因为你不需要担心它会把observables的最后一个值。 这样,只要有任何一个新的值发出(例如,你在间隔或某物上获取),你就可以得到更新。

在反应 x.io forkJoin实际上指向Zip ,为我做了这个工作:

 let subscription = Observable.zip(obs1, obs2, ...).subscribe(...);