2017-05-27 110 views
0

我有下一個問題:我正在爲Jenkins使用其API REST做一個插件。我想獲得所有構建的所有結果,併爲每個作業執行平均失敗/nºexec。我想獲得最後10個版本,所以我必須發送10個http get。 其實我的代碼是這樣的:我如何等待9 HTTP GET請求Angular 2

for (var j = init; j >= 1; j--){ 
    this.http.get(data2.builds[j].url + this.finalURL).subscribe(response => { 
     let data3 = response.json(); 
     if(data3.result == "FAILURE"){ 
      numberOfFails = numberOfFails+1; 
     } 
    }, error => console.error(error)); 
} 
this.http.get(data2.builds[0].url + this.finalURL).subscribe(response => { 
    let data3 = response.json(); 
    if (data3.result == "FAILURE"){ 
     numberOfFails = numberOfFails + 1; 
    } 
    let average = numberOfFails/(init+1); 
    console.log(numberOfFails +" " + init+1 + " " +average); 
    if (average <= 0.1){ 
     this.successList.push(new Job(data3.fullDisplayName, data3.result,data2.url, average)); 
    } else if (average<0.8){ 
     this.brokenList.push(new Job(data3.fullDisplayName, data3.result, data2.url, average)); 
    }else { 
     this.failureList.push(new Job (data3.fullDisplayName, data3.result, data2.url, average)); 
    } 

我做9 HTTP請求尋找的結果。在我做最後的請求尋找結果之後,我做了平均值。有時候平均值是在上一次請求完成之前完成的。我怎樣才能解決這個問題?

+1

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

回答

1

您可以使用Observable.zip或Observable.forkJoin一次解決它們,並一次獲得結果。這與Promise.all類似。 我會親自使用forkJoin在這種情況下 http://xgrommx.github.io/rx-book/content/observable/observable_methods/forkjoin.html

var source = Rx.Observable.forkJoin(
    Rx.Observable.return(42), 
    Rx.Observable.range(0, 10), 
    Rx.Observable.from([1,2,3]), 
    RSVP.Promise.resolve(56) 
//Your http calls will be here instead 
); 

var subscription = source.subscribe(
    function (x) { 
    console.log('Next: %s', x); 
    }, 
    function (err) { 
    console.log('Error: %s', err); 
    }, 
    function() { 
    console.log('Completed'); 
    }); 

// => Next: [42, 9, 3, 56]