我如何跟踪所有在Angular 2中循环调用的api'调用?

时间:2018-01-11 14:58:39

标签: javascript typescript angular2-services

我基于for循环调用很多api,我如何跟踪所有内容都已成功完成。

我知道如何跟踪,但这只适用于一个api'call ..

那么我怎么能克服这个想法,我知道所有的api'呼叫都已成功完成。

这是api的方法,可以循环调用几次。

 getpages(id) {
    let url = ApiAddress.API_ENDPOINT + '/ads/publish/' + id + '/pages';
    let token = localStorage.getItem('token');
    let headers = new HttpHeaders()
        .set('Content-Type', 'application/json')
        .set('authorization', 'Bearer ' + token);
    return this
        .http
        .get(url, {headers: headers})
}

我在那个循环中订阅它。我怎么知道所有都成功完成。所以我可以隐藏加载栏

2 个答案:

答案 0 :(得分:0)

通过阅读Angular 2文档,我假设http.get方法返回一个promise。

如果您想等待所有请求完成使用此功能,您可能希望完成所有承诺 - 这就是Promise.all的用途(=

在代码中:

getpages(id) {
    let url = ApiAddress.API_ENDPOINT + '/ads/publish/' + id + '/pages';
    let token = localStorage.getItem('token');
    let headers = new HttpHeaders()
        .set('Content-Type', 'application/json')
        .set('authorization', 'Bearer ' + token);
    return this
        .http
        .get(url, {headers: headers})
}

const IDS_PROMISES = [1,2,3].map(id=>getPages(id)); // Enter your IDS
Promise.all(IDS_PROMISES).then(()=>{
  // Here you can check the status of each request after they are ALL done.
})

答案 1 :(得分:0)

您可以通过以下方式捕获API调用的错误:

return this.http.get(url, {headers: headers}) .catch( err => return Observable.throw( err ) );

在订阅方法上你可以这样:

this.getPages(id).subscribe( response => { console.log("success") }, ( err ) => { console.log("error") } );