角度拦截器看起来像这样:
public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
catchError(err => {
if (err instanceof HttpErrorResponse) {
if (err.status === 401) {
this.auth.getToken().subscribe((refreshOk: boolean) => {
if (!refreshOk) {
this.router.navigate(["/login"]);
}
});
}
}
return Observable.throw(err);
})
);
问题在于,同时进行了四个不同的api调用。因此,同时进行了四个getToken调用。仅一个电话就足够了。如何确保一次只打一个电话?
答案 0 :(得分:0)
在您进行api调用的地方,可以使用race
观察对象并将api调用放入其中。响应的第一个赢了,其他的则被拒绝了。
// RxJS v6+
race(
api.get('http://abc/foo'),
api.get('http://abc/bar'),
api.get('http://abc/baz'),
);
// RxJS v5
Observable.race(
api.get('http://abc/foo'),
api.get('http://abc/bar'),
api.get('http://abc/baz'),
);