angular 4 loading.dismiss() 不工作

angular 4 loading.dismiss() not working

我正在尝试在 handleError() 方法中执行 loading.dismiss() ,但不确定该怎么做? 它运行良好,响应良好,不确定如何处理错误情况

请帮忙

@Injectable()

导出 class 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);
 }

}

loading 对象在您的 handleError 方法中不存在,因为它的范围是 getPosts(),所以您无法访问它,如果 loading 是全局设置的,或者是 class 的 属性。我认为有几个解决方案可以解决这个问题:

首先是取消加载,然后调用 handleError:

// your getPosts method ...
.catch(err =>{
  loading.dismiss();
  this.handleError(err);
});

第二个(如前所述)是创建一个 属性 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);
   });
 }

也尝试将方法内容包装在加载 present() 方法返回的承诺中,在加载之前触发方法 dismiss() 有很多并发错误(或任何其他可呈现的组件)甚至显示给用户。

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

我只是打算为 Ionic 4 用户放弃这个

const loading = await this.loadingController.create({ message: 'Processing card' })
      loading.present().then( () => {
          getPostFunction({
              data: {email:"test@test.com"}
          }).then((response) => {
              loading.dismiss();
              console.log(response);
          }, (error) => {
               loading.dismiss();
              console.log(error)
          });
      })