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
обещать только 'JWT.verify' с' новой Promise', в отдельной функции. Затем вызовите это и используйте обратные вызовы 'then' для всего остального – Bergi