在拦截器上获取令牌时出错 - 输入'Promise <void | =“”observable <httpevent <any =“”>&gt;&gt;'不能分配给'Observable <httpevent <any>&gt;'

时间:2018-06-07 14:16:37

标签: angular ionic-framework

我正在创建一个拦截器来发送令牌以及Api的请求。

我使用@ionic/storage来存储我的用户信息。但是,当我尝试将构造函数中的令牌保存到变量(例如私有令牌:字符串)时,即使令牌存在,我的拦截器也无法获取该值。 我相信这是因为拦截是在this.storage.get函数结束之前执行的。

我该如何解决这个问题?

我尝试将this.storage.get函数放在拦截中,但返回错误:

  

输入'承诺&lt;无效|可观察到的&lt; HttpEvent&lt;任何&gt;&gt;&gt;'不是   可分配给'Observable&lt;类型HttpEvent&LT;任何GT&;&GT;”。属性   'Promise&lt;类型'中缺少'_isScalar'无效|可观察到的&LT;   HttpEvent&GT;&GT;”

查看代码:

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您可以使用Observable.fromPromise方法将Promise转换为Observable

答案 1 :(得分:0)

在返回之前将存储承诺转换为$scp '/tmp/*.{xml,crt,jks}' user@<destination server>

Observable