我有一个方法可以进行post调用,并且在成功时会解析一个promise,但如果post调用由于某种原因失败,我想实现递归逻辑来调用解析promise的方法。如何实现这一点以有效地处理承诺。下面是我正在尝试的代码。现在,当服务调用失败时,它正在重试,但是我得到了未处理的拒绝错误,它正在再次自行重试,然后拒绝。
dummyService.getAction = (requestData) => {
var options = {
url: config.url,
json: true,
body: requestData,
method: 'post',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'x-request-id': 'IntegrationTesting'
}
}
return new Promise(function (resolve, reject) {
request(options, function (error, response, body) {
const success = new RegExp('^2\\d{2}$');
const failure = new RegExp('^4\\d{2}$');
if (error) {
reject(response);
}
else if (failure.test(response.statusCode) || recursive > 5) {
reject(response);
}
else if (success.test(response.statusCode) && body) {
resolve(body);
}
else {
recursive++;
setTimeout(function () {
dummyService.getAction(requestData)
}, 500);
}
})
})
}
答案 0 :(得分:1)
问题在于dummyService.getAction
在您重试时返回的承诺基本上被忽略了。试试这个:
setTimeout(function () {
dummyService.getAction(requestData).then(resolve, reject);
}, 500);