我有一个名为downloadItem
的函数,由于网络原因可能会失败,我希望在最终拒绝该项之前能够重试几次。由于如果存在网络问题,立即重试是没有意义的,因此重试需要设置超时。
以下是我目前的代码:
function downloadItemWithRetryAndTimeout(url, retry, failedReason) {
return new Promise(function(resolve, reject) {
try {
if (retry < 0 && failedReason != null) reject(failedReason);
downloadItem(url);
resolve();
} catch (e) {
setTimeout(function() {
downloadItemWithRetryAndTimeout(url, retry - 1, e);
}, 1000);
}
});
}
显然这会失败,因为第二次(及以后)调用
downloadItemWithRetryAndTimeout
时,我没有像要求的那样返回一个promise。如何让第二个promise正确工作?附带说明,如果有关系,代码正在NodeJS中运行。
downloadItem
函数真的是同步的吗?我认为它应该返回一个Promise。 - Bergi