首页 文章

等待承诺完成外部功能

提问于
浏览
2

我正在使用Ionic2 Laravel . 我试图制作一个"interceptor",它会在我的所有Http请求中将来自LocalStorage的令牌(JWT)放入Header .

所以,我用一种方法制作了一个服务:

post(url : string, json : any) : Observable <\Response> {

    var headers = new Headers();
    var token = null;
    this.local.get("token").then( (tk) => {
        headers.append('Authorization', 'Bearer ' + tk);
        var options = new RequestOptions({headers: headers});
        token = tk;
    });

    -> wait the 'token' != null <-
    return this.http.post(url, JSON.stringify( json ), options);
}

问题是:
我期待从此服务调用post()时返回“Observable <\ Response> http.post()” .
但是,我需要“this.local.get()”Promise完成解析,因为我需要LocalStorage中的令牌附加到Header上 .

我如何制作“this.local.get()”Promise,获取令牌,所以,声明Observable http.post()并返回它? (到外部功能)

我找不到办法去做 . 有什么建议?谢谢:DD

1 回答

  • 0

    关键在于对Promise对象的 then() 方法的调用 . 与 done() (返回 undefined )不同, then 返回另一个promise,其值解析为作为参数传递给 then 的函数返回的值 . 你可以利用这两次:一次将你的令牌传递给 http.post() ,并再次从你的 post() 函数中返回整个承诺:

    post(url : string, json : any) : Observable <\Response> {
    
        var headers = new Headers();
        return this.local.get("token").then( (tk) => {
            headers.append('Authorization', 'Bearer ' + tk);
            var options = new RequestOptions({headers: headers});
            return tk;
        }).then(tk){
            return this.http.post(url, JSON.stringify( json ), options);
        };
    }
    

相关问题