我想使用返回可观察对象的对象方法转换并替换数组中的所有单词。我使用基于this answer的绑定来传递正确的值。
当所有订阅完成后,我想调用另一个名为task2()
的函数。我该如何实现呢?
for(let word in this.words){
var i = Object.keys(this.words).indexOf(word);
this.convertor.get(this.words[i].value).subscribe( function (i, result) {
this.words[i].value = result;
}.bind(this, i));
}
//task2() <--------- when all subscribe functions finished
答案 0 :(得分:1)
this.words
是什么类型的?如果它是一个数组,那么循环它们的项目会更容易......你正在做一些非常奇怪的事情......
另外,请考虑使用箭头功能以避免在任何地方使用bind(this)
。它有助于读出代码。
您应该使用forkJoin
:
let streams = [];
for(let i = 0; i<this.words.length; i++){
streams.push(this.convertor.get(this.words[i].value));
}
Rx.Observable.forkJoin(streams).subscribe((result) => {
// Here result is an array with the results, and it's sorted properly (The first result is from the first stream, and so on).
for(let i=0; i<result.length; i++) {
this.words[i].value = result[i];
}
task2();
});
答案 1 :(得分:0)
我的模板解决方案:生成函数,仅在N次调用后调用另一个函数(如Promise.all)
这样的事情:
setlocale (LC_TIME,"de_DE");
&#13;