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'와'new Promise' 만 별도로 약속합니다. 그런 다음 그것을 호출하고 다른 모든 호출에 'then' 호출을 사용합니다. – Bergi