同时订阅但按顺序发出?

时间:2018-04-06 17:15:39

标签: typescript rxjs reactive-programming

有没有办法获取Observables的集合,一次订阅它们,但让它们按一定的顺序发出?

我的用例是我想要发出几个HTTP请求,并让它们同时进行,因为请求是彼此独立的。但是,在所有其他请求完成结果操作后,我需要其中一个HTTP请求将结果分配给变量。

这是我到目前为止所拥有的:

let $prereqs: Observable<any>[] = [];

$prereqs.push(
    this.doThing1().map(results => {
        this.thing1Variable = results;
    })
);
$prereqs.push(
    this.doThing2().map(results => {
        this.thing2Variable = results;
    })
);
$prereqs.push(
    this.doThingLast().map(results => {
        this.lastVariable = results;
    })
);

// ...Subscribe to all of them at once HERE...

我认为这可能比forkJoin更好,因为我不需要从最终的Observable结果中跟踪我想要的索引,而是我可以立即订阅它们并让它们执行它们map行动。

我愿意以不同的方式接近这一点。

1 个答案:

答案 0 :(得分:1)

“正确”的方法肯定是

Observable.forkJoin(obs1$, obs2$)
  .subscribe(([result1, result2]) => {
    this.thing1 = result1;
    this.thing2 = result2;
 });

作为旁注,您在问题中误导map。这是一个转换发射值的运算符。您正在执行副作用,这是do的用途。