等待承诺完成外部功能

时间:2016-09-06 23:04:08

标签: angular

我正在使用Ionic2 + Laravel。 我试图制作一个“拦截器”,在我的所有Http请求中将来自LocalStorage的令牌(JWT)放到Header上。(
) 所以,我用一种方法制作了一个服务:

{{1}}
问题是:
我希望从这项服务中拨打电话post()时会返回“ Observable< \ Response> http.post()”。
但是,我需要“ this.local.get()”Promise完成决定,因为我需要LocalStorage中的令牌附加到Header上。

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

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

1 个答案:

答案 0 :(得分: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);
    };
}