我正在尝试在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)
}
该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()甚至在向用户显示加载内容(或任何其他可表示的组件)之前,都会触发很多并发错误。
无论如何,其中一种解决方案可能对您有用,希望对您有所帮助。
| 归档时间: |
|
| 查看次数: |
2140 次 |
| 最近记录: |