从承诺中获取价值

骇人的

我刚刚开始学习这个令人惊奇的东西。我不知道如何从一个诺言数组中获取值。在这里:

const one = new Promise(resolve => {
  setTimeout(() => {
    resolve(1);
  }, 1000);
})
const two = new Promise(resolve => {
  setTimeout(() => {
    resolve(2);
  }, 2000);
})
const observable = Rx.Observable.from([one, two]);
observable.subscribe(v => console.log(v));

我进入控制台:

Promise { <pending> }
Promise { <pending> }

我想得到:

  1. 结果作为一组值 [1,2]
  2. 按承诺解决的顺序将结果作为单个值 1,2

所以,基本上我想模仿一下:

  1. Promise.all([one, two])
  2. Promise.resolve(1), Promise.resolve(2)
马丁

静态方法Observable.from()发出数组中的每个项目,因此您现在拥有的只是发出两个Promise对象:

您正在处理所谓的高阶可观物(又称发射可观物的可观物)。这是RxJS 5容易解决concatAllmergeAll取决于你是否关心他们指定的或者可以将它们收集决心的顺序。

RxJS 5以相同的方式对待Observable,Promises,迭代器,数组(以及类似数组的对象)。这意味着我们像对待可观察对象一样使用您的承诺。

我在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,控制台

打印到控制台:

mergeAll: 2
mergeAll: 1
[2, 1]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章