首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从一系列承诺中获取值

从一系列承诺中获取值
EN

Stack Overflow用户
提问于 2017-01-13 16:04:12
回答 1查看 3.6K关注 0票数 7

我才刚开始学这些神奇的东西。我不知道如何从一系列的承诺中获得价值。这里是我的工作地点:

代码语言:javascript
运行
复制
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));

我进了控制台:

代码语言:javascript
运行
复制
Promise { <pending> }
Promise { <pending> }

我想要:

  1. 结果作为值的数组( [1,2] )
  2. 结果作为单个值,按承诺分辨率的顺序排列,1,2

所以,基本上我想模仿:

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-13 17:27:55

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

你所处理的是所谓的高阶可观测物(也就是可观测到的发射观测物)。这在RxJS 5中是很容易用concatAllmergeAll解决的,这取决于您是否关心指定它们的顺序,还是可以将它们作为解决方案来收集。

RxJS 5以同样的方式对待可观察的、许诺的、迭代器、数组(和数组一样的对象)。这意味着我们使用你的承诺就像它们是可观察的一样。

我在这里使用mergeAll来说明第二个承诺是第一个完成的,尽管它们是按照相反的顺序[one, two]定义的。

代码语言:javascript
运行
复制
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

这将打印到控制台:

代码语言:javascript
运行
复制
mergeAll: 2
mergeAll: 1
[2, 1]
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41638759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档