Angularjs Ionic 3-异步Http调用和Ionic加载问题
我想获得一些关于在异步函数中处理多个HTTP调用时使用IonicAngularjs Ionic 3-异步Http调用和Ionic加载问题,angularjs,http,promise,loading,ionic3,Angularjs,Http,Promise,Loading,Ionic3,我想获得一些关于在异步函数中处理多个HTTP调用时使用IonicLoadingController的帮助 首先,这是我的异步函数 LoadDatafromUrls(urLs) { return new Promise((resolve, reject) => { let loader = this.loadingCtrl.create({ content: 'Son Bilgiler Alınıyor', }); var urlC
LoadingController
的帮助
首先,这是我的异步函数
LoadDatafromUrls(urLs) {
return new Promise((resolve, reject) => {
let loader = this.loadingCtrl.create({
content: 'Son Bilgiler Alınıyor',
});
var urlCalls = [];
urLs.forEach((entry: any) => {
loader.present().then(()=>{
this.http.get(entry.url).map((response : Response)=>{
console.log(response.json());
urlCalls.push(response.json());
}).subscribe(()=>{
console.log("subscribe");
});
loader.dismiss();
})
})
Promise.resolve(urlCalls).then((res)=>{
console.log(res);
resolve(res);
},
(res)=>{
reject(res);
})
//return Promise;
})
}
第二,我这样称呼它
RequestObject.LoadDatafromUrls(urLs).then((results)=>{
console.log(results);
},
(errors)=>{
console.log(errors);
})
在此方法中,我收到以下错误消息:
错误消息:Uncaught(承诺中):未找到removeView
。此外,它并没有以我期望的方式工作
我真的愿意接受全新的方法,新的方式。如果我能有更好的实现,请与大家分享。因为每次收到一个调用的响应后,您都会隐藏加载程序。Ionic在尝试关闭加载程序但视图上没有加载程序时抛出此错误。只有在所有调用都已解决后才关闭加载程序
loader.present();
urLs.forEach((entry: any) => {
// loader.present().then(()=>{
urlCalls.push(this.http.get(entry.url).map((response : Response)=>{
console.log(response.json());
return response.json();
}).subscribe(()=>{
console.log("subscribe");
}).toPromise());
// loader.dismiss();
})
// })
Promise.all(urlCalls).then((res)=>{
console.log(res);
resolve(res);
loader.dismiss()
},
(res)=>{
reject(res);
})
编辑:
如何使用解析多个观察值?
getData(urls){
var loader = this.loadingCtrl.create({
content : "Loading..."
});
loader.present();
this.LoadDatafromUrls(urls).subscribe(res=>{
console.log(res)//array of responses
loader.dismiss();
},err=>{
console.log(err);// it will fire if any one call fails
loader.dismiss();
});
}
LoadDatafromUrls(urls){
var arrObservables = [];
for(var i = 0; i < urls.length; i++){
arrObservables.push(this.http.get(urls[i]).map((res: Response)=>{
return res.json()
}).catch((err: Response)=>{
return Observable.throw(err);
}))
}
return Observable.forkJoin(arrObservables);
}
因为每次从每个调用获得响应后,您都会隐藏加载程序。Ionic在尝试关闭加载程序但视图上没有加载程序时抛出此错误。只有在所有调用都已解决后才关闭加载程序
loader.present();
urLs.forEach((entry: any) => {
// loader.present().then(()=>{
urlCalls.push(this.http.get(entry.url).map((response : Response)=>{
console.log(response.json());
return response.json();
}).subscribe(()=>{
console.log("subscribe");
}).toPromise());
// loader.dismiss();
})
// })
Promise.all(urlCalls).then((res)=>{
console.log(res);
resolve(res);
loader.dismiss()
},
(res)=>{
reject(res);
})
编辑:
如何使用解析多个观察值?
getData(urls){
var loader = this.loadingCtrl.create({
content : "Loading..."
});
loader.present();
this.LoadDatafromUrls(urls).subscribe(res=>{
console.log(res)//array of responses
loader.dismiss();
},err=>{
console.log(err);// it will fire if any one call fails
loader.dismiss();
});
}
LoadDatafromUrls(urls){
var arrObservables = [];
for(var i = 0; i < urls.length; i++){
arrObservables.push(this.http.get(urls[i]).map((res: Response)=>{
return res.json()
}).catch((err: Response)=>{
return Observable.throw(err);
}))
}
return Observable.forkJoin(arrObservables);
}
我正在尝试你上面提到的方法。我将编辑此有关反馈的评论。谢谢它只显示了2-3秒,然后消失了,我输入了多少url。此外,我只放了一个检索12mb数据的url,它不可能在2-3秒内获取,但它在2-3秒内再次消失。问题是它进入了:Promise.resolve(urlCalls)的范围。然后((res)=>{console.log(res);resolve(res);loader.disease(),(res)=>{reject(res})当请求处于活动状态时,我指的是其挂起或检索数据。它应该首先从调用中获取数据,然后进入Promise.resolve函数。。。我很困惑为什么它会在http调用结束之前到达那里。代码的问题是您正在解析一个空数组的urlCalls。我已编辑了codeCannot use“toPromise()”函数。它不能识别它,你能帮我在哪里声明空数组吗?我正在尝试你上面提到的方法。我将编辑此有关反馈的评论。谢谢它只显示了2-3秒,然后消失了,我输入了多少url。此外,我只放了一个检索12mb数据的url,它不可能在2-3秒内获取,但它在2-3秒内再次消失。问题是它进入了:Promise.resolve(urlCalls)的范围。然后((res)=>{console.log(res);resolve(res);loader.disease(),(res)=>{reject(res})当请求处于活动状态时,我指的是其挂起或检索数据。它应该首先从调用中获取数据,然后进入Promise.resolve函数。。。我很困惑为什么它会在http调用结束之前到达那里。代码的问题是您正在解析一个空数组的urlCalls。我已编辑了codeCannot use“toPromise()”函数。它无法识别它,您还可以帮助我在何处声明空数组。