use*_*612 2 javascript rxjs rxjs5 angular
我正在一个项目(Angular2)上进行动态创建Observable并将其放入数组中
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;
}
Run Code Online (Sandbox Code Playgroud)
我想执行一系列的所有可观察对象(forkJoin似乎并行运行-因此使用了concat)。一旦执行了所有可观察项,便要执行一些与数据库相关的代码。但是似乎我在“ Completed”块中的代码并不等待所有Observable的完成。我该如何实现?
提前致谢
使用Observable.concat(ObservableArray)只会使数组变平,并逐一发出每个Observable ObservableArray。顺便说一句,concat仅使用带有两个或多个参数的静态版本才有意义(请参阅http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-concat)。
取而代之的是,您可以迭代Observable的数组,并等待它们与concatAll()运算符一一完成。
此示例模拟您的用例:
var observableArray = [];
// filling up Observable array dynamically
for (var i = 0; i < 10; i++) {
observableArray.push(Observable.of('Value ' + i));
}
Observable.from(observableArray)
.concatAll()
.subscribe(console.log, null, () => console.log('completed'));
Run Code Online (Sandbox Code Playgroud)
在Observable.from()发射每个可测量分别与concatAll()订阅了在它们被发射的次序逐一。
该演示打印以控制台以下输出:
Value 0
Value 1
Value 2
Value 3
Value 4
Value 5
Value 6
Value 7
Value 8
Value 9
completed
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1556 次 |
| 最近记录: |