有没有办法获取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
行动。
我愿意以不同的方式接近这一点。
答案 0 :(得分:1)
“正确”的方法肯定是
Observable.forkJoin(obs1$, obs2$)
.subscribe(([result1, result2]) => {
this.thing1 = result1;
this.thing2 = result2;
});
作为旁注,您在问题中误导map
。这是一个转换发射值的运算符。您正在执行副作用,这是do
的用途。