0
function Auth() {
this.accessTokenError = false;
}
Auth.prototype.validateToken = function (accessToken, refreshToken) {
var token;
var self = this;
return new Promise(function (resolve, reject) {
AuthCron.secret()
.then(function (secret) {
if (self.accessTokenError) {
token = refreshToken;
secret = secret.substr(0, secret.length/2);
}
else
token = accessToken;
JWT.verify(token, secret, function (error, decoded) {
console.log(error, decoded);
if (error) {
if (!self.accessTokenError) {
self.accessTokenError = true;
// I don't know how to handle this
self.validateToken(accessToken, refreshToken)
}
else {
self.accessTokenError = false;
reject(error);
}
}
else
resolve(decoded.user);
});
})
.catch(function (err) {
reject(err)
});
})
};
我對如何處理遞歸諾言有點困惑。這裏的問題是第一個承諾永遠不會解決也不會拒絕。處理這種情況的最佳方法是什麼?如果訪問令牌已過期或無效,則此函數接受兩個令牌,然後驗證刷新令牌,如果刷新令牌也無效,則承諾應拒絕。如何處理遞歸諾言
避免['Promise'構造反模式](http://stackoverflow.com/q/23803743/1048572)! – Bergi
你可以重構以上代碼 – Rayees
promisify只''JWT.verify'與'新的承諾',在一個單獨的功能。然後調用它並使用'then'回調函數 – Bergi