我如何等待所有observable顺序执行?

时间:2017-12-14 15:32:55

标签: javascript angular typescript ionic-framework rxjs

我知道forkJoin将等待所有可观察对象的触发,但我需要按顺序触发这些可观察对象。我可能误解了concat的用法,但我们的代码或多或少看起来像这样:

const observables: Observable<ArrayBuffer>[] = [];

  observables.push(
    Observable.fromPromise(this.file.readAsArrayBuffer(directoryPath, filePath))
      .map((arrayBuffer) => {
        // work done here on "object", name obsfucated for client reasons
        return arrayBuffer;
      },
    ),
  );
});

return Observable.concat(observables).map((arrayBuffers) => {
  //we return "object" from here that's also obfuscated for client reasons
});

这是错的吗?这不会按顺序点火吗?我们一直有问题。

1 个答案:

答案 0 :(得分:1)

承诺急切,所以总会直接开始执行。您可以将其包装在Observable.defer(() => myPromise())

中来推迟

如果您首先要创建一个可观察的数组,然后按顺序执行,则可以使用.concatMap().concatAll()

const myObsArray = [];
myObsArray.push(Observable.defer(() => Promise.resolve(1));
myObsArray.push(Observable.defer(() => Promise.resolve(2));

Observable.from(myObsArray).concatAll().subscribe(val => console.log(val));