2017-01-03 44 views
3

我正在为api中的每个循环进行一次api调用。一旦完成了所有调用,我想调用另一个通过路由器重定向用户的函数。Angular 2在每个函数之后的调用函数

这是我到目前为止有:

processData(){ 
var itemsToMove = this.myArray.length; 

this.myArray.forEach((item:any, index:any) => { 

let urlSearchParams = new URLSearchParams(); 

//code that sets up my urlSearchParam 
let body = urlSearchParams.toString(); 
itemsToMove--; 

this.putService.putObjectWithBody("myapicall", body).subscribe(data => { 
if (itemsToMove === 0) { 
this.redirect(); 
    } 
}); 
} 
} 

有没有更好的办法,我可以保证异步数据调用this.redirect()前处理?这个工作,但它似乎效率低下和凌乱

回答

3

你可以使用forkJoin这种情况;它在进入回调之前并行运行所有可观察序列。所以为此你需要一个观测数组。

processData(){  
    var observableArray:any = []; 
    this.myArray.forEach((item:any, index:any) => { 

    let urlSearchParams = new URLSearchParams(); 

    //code that sets up my urlSearchParam 
    let body = urlSearchParams.toString(); 

    observableArray.push(this.putService.putObjectWithBody("myapicall", body)); 
    } 

    Observable.forkJoin(observableArray) 
     .subscribe(data => { 
      //this.myFunction(data[0], data[1]...); 
      this.redirect(); 
     }); 
} 

编号:https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/forkjoin.md

+0

谢谢!这工作完美 – Bhetzie

+0

@Bhetzie很高兴我可以帮助! – echonax

相关问题