我才刚开始学这些神奇的东西。我不知道如何从一系列的承诺中获得价值。这里是我的工作地点:
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,2] )1,2所以,基本上我想模仿:
Promise.all([one, two])Promise.resolve(1), Promise.resolve(2)发布于 2017-01-13 17:27:55
静态方法Observable.from()会发出数组中的每个项,所以您现在拥有的只会发出两个Promise对象:
你所处理的是所谓的高阶可观测物(也就是可观测到的发射观测物)。这在RxJS 5中是很容易用concatAll或mergeAll解决的,这取决于您是否关心指定它们的顺序,还是可以将它们作为解决方案来收集。
RxJS 5以同样的方式对待可观察的、许诺的、迭代器、数组(和数组一样的对象)。这意味着我们使用你的承诺就像它们是可观察的一样。
我在这里使用mergeAll来说明第二个承诺是第一个完成的,尽管它们是按照相反的顺序[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]https://stackoverflow.com/questions/41638759
复制相似问题