实现一个函数 retry(fn, times, delay),对异步操作进行重试

推荐答案

-- -------------------- ---- -------
-------- --------- ------ ------ -
    ------ --- ----------------- ------- -- -
        ----- ------- - ------------------- -- -
            ----
                --------------
                -------------- -- -
                    -- ------------------ - -- -
                        ------------- -- ------------------------- - --- -------
                    - ---- -
                        --------------
                    -
                ---
        --

        ---------------
    ---
-

本题详细解读

1. 函数定义

retry(fn, times, delay) 是一个用于重试异步操作的函数。它接受三个参数:

  • fn: 一个返回 Promise 的异步函数。
  • times: 重试的次数。
  • delay: 每次重试之间的延迟时间(以毫秒为单位)。

2. 实现逻辑

  • Promise 封装:函数返回一个 Promise,这意味着调用者可以使用 .then().catch() 来处理成功或失败的情况。
  • 递归重试attempt 是一个递归函数,用于尝试执行 fn。如果 fn 失败,并且还有剩余的重试次数,则会在指定的延迟后再次尝试。
  • 重试次数控制remainingAttempts 参数用于控制剩余的重试次数。每次重试后,remainingAttempts 减 1,直到为 0 时停止重试。
  • 延迟执行:使用 setTimeout 来实现每次重试之间的延迟。

3. 使用示例

在这个示例中,fetchData 是一个异步函数,retry 会尝试最多 3 次,每次间隔 1 秒。如果最终成功,则输出数据;如果失败,则输出错误信息。

纠错
反馈