角度4 loading.dismiss()不起作用

Jay*_*esh 1 ionic2 angular

我正在尝试在handleError()方法内进行loading.dismiss(),但不确定如何做?响应良好时,它可以正常工作,不确定如何处理错误情况

请帮忙

@Injectable()
Run Code Online (Sandbox Code Playgroud)

导出类SharedProvider {

 private _postsURL = "https://jsonplaceholder.typicode.com/posts";

 constructor(private http: Http, public loadingCtrl: LoadingController) {
 }



 getPosts(): Observable<IPosts[]> {

    let loading = this.loadingCtrl.create({
        content: 'loading...'
      });
      loading.present();
     return this.http
         .get(this._postsURL)
         .map((response: Response) => {
            loading.dismiss();
            console.log("Result printed!!");
             return <IPosts[]>response.json();

         })
         .catch(this.handleError);


 }

  handleError(error: Response) {
      this.loading.dismiss();
     console.log("Err printed!!" + error.statusText);
     return Observable.throw(error.statusText);
 }
Run Code Online (Sandbox Code Playgroud)

}

Gab*_*eto 5

loading对象在您的handleError方法中不存在,因为它的作用域为,getPosts()因此您无法访问它,如果loading已全局设置对象或类的属性,则有可能。我认为有两种解决方案可以解决此问题:

首先是取消您的加载,然后致电handleError

// your getPosts method ...
.catch(err =>{
  loading.dismiss();
  this.handleError(err);
});
Run Code Online (Sandbox Code Playgroud)

第二个(如上所述)是创建一个属性loading并使用它,而不是作用域加载对象。

 private _postsURL = "https://jsonplaceholder.typicode.com/posts";
 public loading;
 constructor(private http: Http, public loadingCtrl: LoadingController) {
 }

 getPosts(): Observable<IPosts[]> {
   this.loading = this.loadingCtrl.create({ content: 'loading...' });
   this.loading.present().then(() =>{
     return this.http
         .get(this._postsURL)
         .map((response: Response) => {
            this.loading.dismiss();
            console.log("Result printed!!");
             return <IPosts[]>response.json();

         })
         .catch(this.handleError);
   });
 }
Run Code Online (Sandbox Code Playgroud)

同样,尝试将方法内容包装在load present()方法返回的promise中,dismiss()甚至在向用户显示加载内容(或任何其他可表示的组件)之前,都会触发很多并发错误。

无论如何,其中一种解决方案可能对您有用,希望对您有所帮助。