因为我找到了答案,所以我不得不自己回答问题。这个问题源于我使用的拦截器,它是图片中隐藏的变量。
我的应用程序使用
ngrx
用于Redux商店管理。我的拦截器点击存储获取授权令牌。
这是我的拦截器代码:
@Injectable()
export class TokenInterceptor implements HttpInterceptor {
constructor(private store: Store<fromStore.State>,
private route: Router) { }
intercept(request: HttpRequest<any>, next: HttpHandler):
Observable<HttpSentEvent
| HttpHeaderResponse
| HttpProgressEvent
| HttpResponse<any>
| HttpUserEvent<any>> {
const rc = this.store.select(x => x.main.token).pipe(
take(1), // <--- This is where the take(1) was needed
switchMap(r => {
const req2 = request.clone({
setHeaders: {
Authorization: `Bearer ${r}`
}
});
return next.handle(req2);
}));
return rc;
}
}
如你所见,没有这个
take(1)
在那里,拦截器修改的请求实际上从未完成,因为存储订阅从未完成。
希望这个不起眼的案子能帮上忙:)