推荐答案
-- -------------------- ---- ------- -------- --------- ------ ------ - ------ --- ----------------- ------- -- - ----- ------- - ------------------- -- - ---- -------------- -------------- -- - -- ------------------ - -- - ------------- -- ------------------------- - --- ------- - ---- - -------------- - --- -- --------------- --- -
本题详细解读
1. 函数定义
retry(fn, times, delay)
是一个用于重试异步操作的函数。它接受三个参数:
fn
: 一个返回Promise
的异步函数。times
: 重试的次数。delay
: 每次重试之间的延迟时间(以毫秒为单位)。
2. 实现逻辑
- Promise 封装:函数返回一个
Promise
,这意味着调用者可以使用.then()
和.catch()
来处理成功或失败的情况。 - 递归重试:
attempt
是一个递归函数,用于尝试执行fn
。如果fn
失败,并且还有剩余的重试次数,则会在指定的延迟后再次尝试。 - 重试次数控制:
remainingAttempts
参数用于控制剩余的重试次数。每次重试后,remainingAttempts
减 1,直到为 0 时停止重试。 - 延迟执行:使用
setTimeout
来实现每次重试之间的延迟。
3. 使用示例
function fetchData() { return fetch('https://api.example.com/data') .then(response => response.json()); } retry(fetchData, 3, 1000) .then(data => console.log('Data fetched:', data)) .catch(error => console.error('Failed after retries:', error));
在这个示例中,fetchData
是一个异步函数,retry
会尝试最多 3 次,每次间隔 1 秒。如果最终成功,则输出数据;如果失败,则输出错误信息。