2017-01-03 78 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

相關問題