我知道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
});
这是错的吗?这不会按顺序点火吗?我们一直有问题。
答案 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));