我有一个ionic3 app项目,我在应用程序收到服务器的响应时添加一个拦截器,当响应状态等于401然后app跳到登录页面时,我使用app.getRootNav()。setRoot(LoginPage) )。但是,当带有toast的页面收到401响应时,toast仍然会出现,这是意外的
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
this.rest = this.inj.get(RestProvider);
return next.handle(req).do(
res => {
...
},
err => {
if (err instanceof HttpErrorResponse) {
if (err.status == 401) {
this.app.getRootNav().setRoot(LoginPage);
super.showToast(this.toastCtrl, "sorry, due to authorization, you must login again")
return;
} else {
throw err;
}
}
})
}
然后我的http请求如下:
this.http.post(this.baseUrl + "/recvUsername",param)
.subscribe(
res => {
this.initRecvUsernames(res["data"]);
},
err => {
console.error("get receive user error:" + err.message);
super.showToast(this.toast, "get receive user error");
}
)
然后请求页面上的toast将显示我何时跳到登录页面,如何在请求页面终止吐司?谢谢答案!
答案 0 :(得分:0)
您可以在http参数中传递一个标志,然后在拦截器
中将其删除const params = req.params;
const isPreventToast = params.has('preventToast');
params.delete('preventToast')
const newReq = req.clone({ params });
return next.handle(newReq).do(..., err => { if(!isPreventToast) ... })