Promise .all() with RxJS

后端 未结 4 2285
死守一世寂寞
死守一世寂寞 2020-12-06 01:14

I\'m writing an app in Angular 2 and I want to execute several http requests and run a function on the responses.

In Angular 1, I would write something like $q

4条回答
  •  无人及你
    2020-12-06 01:32

    I'm learning RxJS and I was trying to do the same thing with RxJS v5

    It seems like we don't have forkJoin on v5 anymore, so here's how I got it working (works with flatMap or mergeMap, which are aliases):

    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'));
    

提交回复
热议问题