gpt4 book ai didi

javascript - 从具有 Angular 2 http 调用的函数返回 Promise,该调用返回 Observable

转载 作者:行者123 更新时间:2023-12-02 13:49:16 25 4
gpt4 key购买 nike

我的服务中有一个方法,它从存储中读取 token 并返回一个 promise 。

getToken() {
return this.storage.get('access_token');
}

(storage.get 返回一个 promise )

我需要修改上述方法,使其首先从存储中读取访问 token 并检查其过期时间,如果未过期则立即返回,如果过期则从存储中读取refresh_token,即 this.storage.get('refresh_token' ),它再次返回一个 promise ,在检查它是否过期后,我需要使用 Angular 2 http.post 向我的 api 发出 http 请求,这将返回一个新的访问 token 。一旦收到新的访问 token ,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;
}

任何人都可以指导如何实现这一目标吗?

最佳答案

我跟你打赌have the wrong this在您传递给 new Promise 构造函数的回调函数中。

您也可以在那里使用箭头函数,或者您只需 avoid the promise construction antipattern并完全放弃它:

getToken() {
return this.storage.get('access_token').then(accessToken => {
if (!accessToken)
return null;
else if (!this.isExpired(accessToken))
return accessToken;
else
return this.storage.get('refresh_token').then(refreshToken => {
if (this.isExpired(refreshToken))
return null;
else
return promiseFromObservable(this.http.post('/api/refresh/', { token:refreshToken }));
});
});
}

function promiseFromObservable(o) {
return new Promise(resolve => o.subscribe(resolve));
}

关于javascript - 从具有 Angular 2 http 调用的函数返回 Promise,该调用返回 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41131141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com