【发布时间】:2018-12-16 23:44:16
【问题描述】:
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;
});
这在 Angular 上运行得非常好。
"rxjs": "^5.4.3", "@angular/common": "^5.0.3",
升级后,
"@angular/common": "^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';
现在它给出了以下代码部分的错误“错误TS2304:找不到名称'switchMap'。”
return this.tokenSubject.pipe(
filter(token => token != null),
take(1),
switchMap(token => {
return next.handle(this.addToken(req));
})
);
【问题讨论】:
-
import 'rxjs/add/operator/switchMap'; -
它在从“rxjs/operators”中更改 import { switchMap } 时出现新错误;导入 'rxjs/add/operator/switchMap';.. 更新问题
-
在进行角度升级时,您是否尝试了update.angular.io 中列出的所有步骤?
-
@Capricorn 是的尝试过
标签: angular typescript angular6 rxjs6