我正在创建一个拦截器来发送令牌以及Api的请求。
我使用@ionic/storage
来存储我的用户信息。但是,当我尝试将构造函数中的令牌保存到变量(例如私有令牌:字符串)时,即使令牌存在,我的拦截器也无法获取该值。我相信这是因为拦截是在this.storage.get函数结束之前执行的。
我怎样才能解决这个问题?
我已经尝试将this.storage.get
函数放在拦截中,但返回错误:
输入'Promise <void | Observable <HttpEvent <any >>>'不能赋值为'Observable <HttpEvent <any >>'。 'Promise <void |类型中缺少属性'_isScalar'可观察的<HttpEvent >>'。
看看代码:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return this.storage.get('token')
.then((token) => {
if (token) {
const newRequest = req.clone({ setHeaders: { 'Authorization': `Bearer ${token}` } });
return next.handle(newRequest);
} else {
return next.handle(req);
}
})
.catch(() => {
//TODO: Trata erro
})
}
谢谢您的帮助。
在返回之前将存储承诺转换为Observable
:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
var promise = this.storage.get('token')
.then((token) => {
if (token) {
const newRequest = req.clone({ setHeaders: { 'Authorization': `Bearer ${token}` } });
return next.handle(newRequest);
} else {
return next.handle(req);
}
})
.catch((error) => {
//TODO: Trata erro
throw error;
})
return Observable.fromPromise(promise);
}
你可以用Promise
方法将你的Observable
转换为Observable.fromPromise
。