我基于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})
}
我在那个循环中订阅它。我怎么知道所有都成功完成。所以我可以隐藏加载栏
答案 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") } );