Звонки в хранилище возвращают Promise и, следовательно, являются асинхронными.Получить токен внутри функции перехвата.Поскольку для функции перехвата требуется Observable, преобразуйте вызов хранилища с помощью RxJS:
import { from } from 'rxjs';
import { mergeMap } from "rxjs/operators";
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return from(this.storage.get('User')).pipe(
mergeMap((val) => {
// clone and modify the request
request = request.clone({
setHeaders: {
Authorization: val
}
});
[...more stuff you want]
return next.handle(request);
});
)
}
Я не тестировал эту функцию, но надеюсь, вы поняли идею.Возможно добавьте оператор if else и токен как локальную переменную, чтобы не читать его из хранилища при каждом вызове.
token:string;
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if(!this.token)
return from(this.storage.get('User')).pipe(
mergeMap((val) => {
this.token = val
[... modify and return request headers like above]
})
)
else{
[... use this.token for headers ]
}
}