return auth.refreshToken().switchMap((token) => {
if (token) {
return next.handle(this.addToken(req));
}
// If we don't get a new token, logout.
auth.logoutUser(0);
return empty;
}).catch((e: any) => {
// If there is an exception calling 'refreshToken', logout.
auth.logoutUser(0);
return empty;
}).finally(() => {
this.isRefreshingToken = true;
});这个角度很好。
"rxjs":"^5.4.3“、”@角/公共“:"^5.0.3",
一旦升级,
“@ar角/公共”:"^6.0.3","rxjs":"^6.0.0"
我得到了运行时错误
"ApiService::handleError TypeError: auth.refreshToken(...).switchMap is not a function
".在搜索找到的解决方案是添加管道,所以添加了
return auth.refreshToken().pipe(switchMap((token) => {
if (token) {
return next.handle(this.addToken(req));
}
// If we don't get a new token, logout.
auth.logoutUser(0);
return empty;
}).catch((e: any) => {
// If there is an exception calling 'refreshToken', logout.
auth.logoutUser(0);
return empty;
}).finally(() => {
this.isRefreshingToken = true;
});但它会引发新的编译时错误。
Argument of type '(token: {}) => Observable<HttpEvent<any>> | ((scheduler?: SchedulerLike) => Observable<never>)' is not assignable to parameter of type '(value: {}, index: number) => ObservableInput<HttpEvent<any>>'."看起来像rxjs升级的问题,这将是什么修复呢?
修改后的进口
import { switchMap } from "rxjs/operators"; to
import 'rxjs/add/operator/switchMap'; 现在,它给出了代码下面一节“error TS2304:无法找到名称‘switchMap’”的错误。
return this.tokenSubject.pipe(
filter(token => token != null),
take(1),
switchMap(token => {
return next.handle(this.addToken(req));
})
);发布于 2018-07-09 14:00:51
快速解决方法是安装,旧代码不需要任何更改。然而,Rxjs 6对于第5版中引入的特性来说是更稳定的版本。因此,您将重新考虑文档,并将导入和rxjs使用的迁移到Rxjs 6。
npm install --save rxjs-compathttps://stackoverflow.com/questions/51243029
复制相似问题