【发布时间】:2020-03-15 11:25:25
【问题描述】:
我是 Node.js 的新手,我正在尝试理解使用错误处理并等待正确获得响应的想法。
所以我从网页请求一些数据,然后如果我完成了数据,但如果没有,那么它应该再次重试并获得直到达到最大数量。
这是我的代码:
const getData = (url) => {
return new Promise((resolve, reject) => {
const options = {
method: 'GET',
url: 'my url',
headers: {
Accept: 'application/json'
}
}
function callBack(error, response) {
if (!error) {
let data = response.data;
return resolve({ success: true, data: data, statusCode: response.statusCode })
} else {
return reject({ success: false, error: error })
}
}
request(options, callBack)
})
}
let count = 1
const retry = async (max, next) => {
let result = await getData(url)
if (result.code !== 200) {
while (count < max) {
console.log('failed, retrying... ' + count);
count = count + 1
retry(max, next);
}
return next('max retries reached', null)
}
console.log('success');
next(null, result.data)
}
因此,在这部分之后,我尝试运行重试,直到获得 5 次数据,例如:
retry(5, 3000, function (err, data) {
if (!err) {
return data
}
return err
})
但是像这样运行重试功能意味着我不会等到我得到数据。如何在调用重试函数时使用 try/catch 或 .then 的思想,让它等待我的数据到来?
【问题讨论】:
-
在
retry()中,您同时拥有迭代(while循环)和递归(重试调用自身)。任何一个(写得正确)都可以完成这项工作,但不能两者兼而有之。
标签: node.js asynchronous promise async-await