静态方法Observable.from()
会发出数组中的每个项目,因此您现在拥有的只会发出两个Promise
对象:
你正在处理所谓的高阶Observables(又名Observables发射Observables).这在RxJS 5中很容易解决,concatAll
或者mergeAll
取决于您是否关心它们被指定的顺序,或者它们可以作为解决方案收集.
RxJS 5以相同的方式处理Observables,Promises,迭代器,数组(以及类似于对象的数组).这意味着我们使用你的Promises就像它们是Observables一样.
我在mergeAll
这里用来表明第二个Promise首先完成,即使它们是以相反的顺序定义的[one, two]
.
const one = new Promise(resolve => { setTimeout(() => { resolve(1); }, 1000); }) const two = new Promise(resolve => { setTimeout(() => { resolve(2); }, 500); }) // Result as individual values in order of promise resolution 2,1 Rx.Observable.from([one, two]) .mergeAll() .subscribe(v => console.log('mergeAll: ' + v)); // Result as an array of values [2,1] Rx.Observable.from([one, two]) .concatAll() .toArray() .subscribe(v => console.log(v));
观看现场演示:https://jsbin.com/tigidon/4/edit?js,console
这打印到控制台:
mergeAll: 2 mergeAll: 1 [2, 1]