Angularjs Ionic 3-异步Http调用和Ionic加载问题

Angularjs 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

我想获得一些关于在异步函数中处理多个HTTP调用时使用Ionic
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()”函数。它无法识别它,您还可以帮助我在何处声明空数组。