Javascript 递归调用承诺
我有一个方法可以进行post调用,成功后会解析承诺,但是如果post调用由于某种原因失败,我想实现递归逻辑来调用解析承诺的方法。我如何实施这一点,以有效地处理承诺。下面是我正在尝试的代码。现在,当服务调用失败时,它正在重试,但我遇到了未处理的拒绝错误,它正在自己重试,然后它正在拒绝Javascript 递归调用承诺,javascript,node.js,bluebird,Javascript,Node.js,Bluebird,我有一个方法可以进行post调用,成功后会解析承诺,但是如果post调用由于某种原因失败,我想实现递归逻辑来调用解析承诺的方法。我如何实施这一点,以有效地处理承诺。下面是我正在尝试的代码。现在,当服务调用失败时,它正在重试,但我遇到了未处理的拒绝错误,它正在自己重试,然后它正在拒绝 dummyService.getAction = (requestData) => { var options = { url: config.url, json: t
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);
}
})
})
}
问题是当您重试时,
dummyService.getAction
返回的承诺基本上被忽略了。试试这个:
setTimeout(function () {
dummyService.getAction(requestData).then(resolve, reject);
}, 500);
是的,你是对的,我不知道如何处理它,你在这里提供的解决方案不起作用,不幸的是:(我终于在这里找到了我问题的解决方案