【发布时间】:2018-02-17 10:59:27
【问题描述】:
我想在 Promise 中重试我的请求。如果我总是有一个 401 错误作为循环,我想启动我的刷新:(如果我在刷新时有 401 循环直到 200)
我试过这个:
const request = require('request');
let conf = require('../conf');
let core_service = require('coreService');
let self = module.exports = {
get_count_questions: function() {
return new Promise((resolve, reject) => {
request({
method: 'GET',
uri: 'http://api/count-questions',
auth: {
'bearer': conf.token
},
json: true
}, function (error, response, body) {
if (!error && response.statusCode === 200) {
resolve(body);
} else if (!error && response.statusCode === 401) {
core_service.refreshToken().then((data) => {
console.log('token refresh');
return self.get_count_questions();
})
} else {
reject(error);
}
})
});
}
};
我只尝试了“self.get_count_questions();”没有回报,但它不起作用。我没有错误消息,只是我的应用程序冻结了。
我在我的 console.log 中看到“令牌刷新”,但在我的应用程序冻结之后...
编辑
我用这个修改过,感觉更好,但是刷新令牌很慢。就在 401 之前,我的应用停止,大约 1 分 40 秒后,运行:
else if (!error && response.statusCode === 401) {
console.log('need refresh token');
core_service.refreshToken()
.then((response) => {
console.log(response);
resolve(self.get_count_questions())
} );
}
我的 refreshToken 函数:
refreshToken: function () {
return new Promise((resolve, reject) => {
request({
method: 'GET',
uri : 'http://api/refresh',
auth : {
'bearer': conf.token
},
json : true
}, function (error, response, body) {
console.log('=====> refresh token <======');
conf.token = body.data;
console.log('new Token');
console.log('=====> end refresh token <======');
if (!error && response.statusCode === 200) {
resolve('Refresh token successful');
} else {
reject('Error refresh');
}
})
});
}
如果我在每个请求上刷新我的令牌,我就会遇到问题:
if (!error && response.statusCode === 200) {
core_service.refreshToken().then((data)=> {
resolve(body);
});
}
【问题讨论】:
标签: javascript node.js promise es6-promise