man*_*dos 3 javascript rxjs rxjs5
我刚刚开始学习这些神奇的东西.我无法弄清楚如何从一系列承诺中获取值.这是我在哪里:
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));
Run Code Online (Sandbox Code Playgroud)
我进入控制台:
Promise { <pending> }
Promise { <pending> }
Run Code Online (Sandbox Code Playgroud)
我想得到:
[1,2]1,2所以,基本上我想模仿:
Promise.all([one, two])Promise.resolve(1), Promise.resolve(2)静态方法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));
Run Code Online (Sandbox Code Playgroud)
观看现场演示:https://jsbin.com/tigidon/4/edit?js,console
这打印到控制台:
mergeAll: 2
mergeAll: 1
[2, 1]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1538 次 |
| 最近记录: |