使用 RxJS 承诺 .all()
Promise .all() with RxJS
我正在 Angular 2 中编写一个应用程序,我想执行几个 http 请求和 运行 响应函数。
在 Angular 1 中,我会写类似 $q.all([$http.get(...), $http.get(...), ...]).then(doSomethingWithResponses);
但是 Angular 2 returns RxJS Observables 并且在大量阅读之后我仍然无法弄清楚如何获得多个 http 请求的响应。如何做到这一点?
正如@Eric Martinez 指出的那样,forkJoin。 forkJoin 并行运行所有可观察序列并收集它们的最后一个元素。
Rx.Observable.forkJoin([a,b]).subscribe(t=> {
var firstResult = t[0];
var secondResult = t[1];
});
我不确定你是否想要使用 forkJoin/zip
, especially considering combineLatest
更容易理解并且会在每个子流事件上发出,而 forkJoin
基本上是在每个子流上采样.
这可能会在以后想要组合多项 Observable 时成为问题。
我正在学习 RxJS,我正尝试用 RxJS v5 做同样的事情
似乎我们在 v5 上不再有 forkJoin
,所以我是这样工作的(使用 flatMap
或 mergeMap
,它们是别名):
const callOne = value =>
new window.Promise(resolve =>
setTimeout(() => resolve(value + 10), 3000)
);
const callTwo = value =>
new window.Promise(resolve =>
setTimeout(() => resolve(value + 20), 1000)
);
Rx.Observable
.of(2)
.do(() => console.log('querying...'))
.mergeMap(number =>
Rx.Observable.zip(
Rx.Observable.fromPromise(callOne(number)),
Rx.Observable.fromPromise(callTwo(number))
)
).concatAll()
.subscribe(createSubscriber('promises in parallel'));
merge
不行吗?您可以订阅处理程序并将处理程序附加到 onComplete
回调。
我首先构建一个可观察对象数组,然后使用静态 merge
:
let obs_ary: any = [obs1, obs2, obs3];
Observable.merge(...obs_ary);
我正在 Angular 2 中编写一个应用程序,我想执行几个 http 请求和 运行 响应函数。
在 Angular 1 中,我会写类似 $q.all([$http.get(...), $http.get(...), ...]).then(doSomethingWithResponses);
但是 Angular 2 returns RxJS Observables 并且在大量阅读之后我仍然无法弄清楚如何获得多个 http 请求的响应。如何做到这一点?
正如@Eric Martinez 指出的那样,forkJoin。 forkJoin 并行运行所有可观察序列并收集它们的最后一个元素。
Rx.Observable.forkJoin([a,b]).subscribe(t=> {
var firstResult = t[0];
var secondResult = t[1];
});
我不确定你是否想要使用 forkJoin/zip
, especially considering combineLatest
更容易理解并且会在每个子流事件上发出,而 forkJoin
基本上是在每个子流上采样.
这可能会在以后想要组合多项 Observable 时成为问题。
我正在学习 RxJS,我正尝试用 RxJS v5 做同样的事情
似乎我们在 v5 上不再有 forkJoin
,所以我是这样工作的(使用 flatMap
或 mergeMap
,它们是别名):
const callOne = value =>
new window.Promise(resolve =>
setTimeout(() => resolve(value + 10), 3000)
);
const callTwo = value =>
new window.Promise(resolve =>
setTimeout(() => resolve(value + 20), 1000)
);
Rx.Observable
.of(2)
.do(() => console.log('querying...'))
.mergeMap(number =>
Rx.Observable.zip(
Rx.Observable.fromPromise(callOne(number)),
Rx.Observable.fromPromise(callTwo(number))
)
).concatAll()
.subscribe(createSubscriber('promises in parallel'));
merge
不行吗?您可以订阅处理程序并将处理程序附加到 onComplete
回调。
我首先构建一个可观察对象数组,然后使用静态 merge
:
let obs_ary: any = [obs1, obs2, obs3];
Observable.merge(...obs_ary);