【问题标题】:rxjs: Chaining Async Requestsrxjs:链接异步请求
【发布时间】:2016-06-11 12:20:42
【问题描述】:

我是 rxjs 的新手,我需要调用 3 个异步请求,这些请求以 promise 开始,并将重新生成的对象按照它们被调用的顺序放入一个数组中。这是我所拥有的(部分基于this question):

let observeFront = Observable.fromPromise(this.requestAsync(frontSlice, "front"));
let observeMiddle = Observable.fromPromise(this.requestAsync(midSlice, "middle"));
let observeEnd = Observable.fromPromise(this.requestAsync(endSlice, "end"));

let observeCombined = Observable.concat(observeFront, observeMiddle, observeEnd);

observeCombined.subscribe(data => {
  // this logs only one object - need all 3 in proper order
  console.log(data);
  this.resultsEmitter.emit(data)
});

observeFront.subscribe(response => {
  // logs the correct object
  console.log("front result:", response);
});

observeMiddle.subscribe(response => {
  // correct
  console.log("middle result:", response);
});

observeEnd.subscribe(response => {
  // correct
  console.log("end result:", response);
});

只有当我有[frontOb, middleObj, endObj] 时,我如何才能发出结果?

【问题讨论】:

标签: angular rxjs


【解决方案1】:

正如@Eric 建议的那样,您可以使用forkJoin() 而不是concat()

let observeFront = Observable.fromPromise(this.requestAsync(frontSlice, "front"));
let observeMiddle = Observable.fromPromise(this.requestAsync(midSlice, "middle"));
let observeEnd = Observable.fromPromise(this.requestAsync(endSlice, "end"));

let observeJoined = Observable.forkJoin(observeFront, observeMiddle, observeEnd);

observeJoined.subscribe(data => {
  console.log(data); // => [frontOb, middleObj, endObj]
  this.resultsEmitter.emit(data)
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多