当前位置:  开发笔记 > 编程语言 > 正文

从一系列承诺中获取值

如何解决《从一系列承诺中获取值》经验,为你挑选了1个好方法。



1> martin..:

静态方法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]

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有