此问题在此处已有答案:
What is "Shadow Identifier Declaration" in JavaScript?(4个答案)
2天前关闭。
我想创建一个函数,当它得到一个错误将去一个函数名为retry,retry将再次尝试该函数,如果它得到错误,它将捕捉错误和重试过程5次,如果它没有通过,它将抛出错误,我得到的是一个无限循环,因为它等待fn和fn有一个错误调用retry,retry将等待de fn再次,所以它永远不会停止,我怎么才能让它进入catch内部重试?
async function retry(fn, retriesLeft = 5, interval = 1500) {
try {
return await fn();
} catch (error) {
if (retriesLeft) {
console.log(`Error: ${error.message} | Retrying in ${interval} ms...`);
await new Promise(resolve => setTimeout(resolve, interval));
return retry(fn, retriesLeft - 1, interval * 2);
}
throw error;
}
}
function teste(retry) {
try {
throw Error
} catch (error) {
retry(teste)
}
}
teste()
我尝试更改代码并在每个步骤中添加console.log,以查看其运行情况,但它总是做同样的事情,它执行函数测试,然后错误使其重试,但它从未在重试中输入catch,我需要它在其中输入ctach,所以进程可以继续。我需要这个进程,因为我试图创建一个泛型函数,当它得到一个错误时重试一个进程。
2条答案
按热度按时间ccrfmcuu1#
发生这种情况是因为你传递给
retry
函数的函数也有一个catch块,它会一次又一次地调用retry
函数。我认为如果你传递的第一个参数不包含try catch
,你的函数会工作得很好。试着像这样调用retry
:k2arahey2#
请尝试下面的代码: