拦截器如何终止处理angular4

问题描述 投票:0回答:1

我有一个ionic3应用程序项目,当应用程序从服务器收到响应时添加拦截器,当响应的状态等于401然后应用程序跳到登录页面时,我使用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将显示当我跳到登录页面时,如何在请求页面终止吐司?谢谢答案!

angular ionic3 interceptor
1个回答
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) ... })
© www.soinside.com 2019 - 2024. All rights reserved.