【发布时间】:2017-04-29 02:33:47
【问题描述】:
我的服务中有一个方法可以从存储中读取令牌并返回一个承诺。
getToken() {
return this.storage.get('access_token');
}
(storage.get 返回一个承诺)
我需要修改上述方法,使其首先从存储中读取访问令牌并检查其是否过期,如果未过期则立即返回,如果过期则从存储中读取 refresh_token 即 this.storage.get('refresh_token' ) 再次返回一个承诺,在检查它是否未过期后,我需要使用 Angular 2 http.post 向我的 api 发出 http 请求,这将返回一个新的访问令牌。一旦收到新的访问令牌,getToken 函数就会返回。
我虽然下面会工作,但它没有:
getToken() {
var promise = new Promise(function (resolve, reject) {
this.storage.get('access_token').then((accessToken) => {
//check if the token is expired
if (accessToken) {
if (!this.isExpired(accessToken)) {
resolve(accessToken);
}
else {
this.storage.get('refresh_token').then((refreshToken) => {
if (!this.isExpired(refreshToken)) {
this.http.post('/api/refresh/', { token:refreshToken })
.subscribe((data) => {
resolve(data);
});
}
else {
resolve(null);
}
});
}
} else {
resolve(null);
}
});
});
return promise;
}
谁能指导一下,如何做到这一点?
【问题讨论】:
-
您遇到了错误,对吧?
-
嘿,承诺+回调地狱。更好地使用
return与Promise.resolve(value)和Promise.reject(value)配对会简化事情,同时删除var promise = new Promise(function (resolve, reject) { -
是的,它返回一个错误。
-
你能指导一下吗?
-
还有哪个错误?请留言。
标签: javascript angular promise observable es6-promise