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