2017-05-27 48 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]