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));
})
);