【发布时间】:2017-08-25 07:06:13
【问题描述】:
我正在开发一个项目 (Angular2),我在其中动态创建 Observables 并将它们放入一个数组中
var ObservableArray : Observable<any>[] = [];
//filling up Observable array dynamically
for (var i = 0; i < this.mainPerson.children.length; i++) {
ObservableArray.push(Observable.fromPromise(this.determineFate(this.mainPerson.children[i])));
}
}
var finalObservable: Observable<any> = Observable.concat(ObservableArray);
finalObservable
.subscribe( data => {
//here I expected to execute determineFate() for all observables inside array
console.log("determine fate resolved data returned [" + data + "]");
}, error => {
console.error("error on Age Year for Characters")
},() => {
//Here I expect this gets executed only when all Observables inside my array finishes
console.log("determine fate resolved data returned COMPLETED");
//DB call
});
determineFate(..): Promise<boolean> {
...
return either true / false if success or error;
}
我想执行一系列的所有 observables(forkJoin 似乎并行运行 - 所以使用 concat)。一旦所有的 observables 都被执行,想要执行一些 DB 相关的代码。但似乎我在“已完成”块中的代码并没有等待所有 Observables 完成。我怎样才能做到这一点?
提前致谢
【问题讨论】:
-
我不明白
forkJoin在这种情况下怎么没用。forkJoin将完成所有可观察的事情。然后你可以运行你的数据库查询。这不是你想要的吗? -
determineFate() 使用了一些被并行线程覆盖的“this”变量。我已经尝试过 forkJoin() 但由于上述问题,需要依次执行。
标签: javascript angular rxjs rxjs5