npm 包 p-retry 使用教程

阅读时长 4 分钟读完

简介

p-retry 是一个 Node.js 的 npm 包,用于方便地在异步函数中添加失败重试机制,从而增加程序的稳定性和可靠性。它使用 Promise 作为异步控制流,并提供了丰富的 API 配置选项,使得开发者可以灵活地配置重试逻辑。

安装

使用 npm 安装:

基本用法

p-retry 的基本用法非常简单,只需要传入一个异步函数,即可创建一个新的函数,在执行时出现异常时会自动进行重试。

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

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

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

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

在上面的例子中,当 fetchFromServer() 函数执行出错时,fetchWithRetry() 函数会进行最多 3 次重试。如果仍然失败,则会抛出错误并被 .catch() 捕获。

配置选项

p-retry 提供了丰富的配置选项,支持对重试行为、等待时间、错误处理等方面进行精细化调整。下面列举了一些常用的选项:

  • retries:最大重试次数,默认为 10。
  • factor:每次重试间隔时间的增加倍数,默认为 2。
  • minTimeout:第一次重试前等待的最小时间(毫秒),默认为 0。
  • maxTimeout:最大等待时间(毫秒),即第 n 次重试时的等待时间为 minTimeout * factor^(n-1) 和 maxTimeout 的较小值,默认为 Infinity。
  • randomize:在计算下一次等待时间时是否随机化,默认为 false。
  • onRetry:每次重试时的回调函数,可以用于记录日志或进行其他操作。
  • retryOnError:判断是否应该对错误进行重试的函数,如果返回 true 则进行重试,默认为 undefined。

示例

下面是一个稍微复杂一些的示例,展示了如何结合配置选项实现更加灵活的重试逻辑。

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

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

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

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

在上面的示例中,我们指定了最大重试次数为 5,每次重试间隔时间的增加倍数为 1.5,第一次重试前等待的最小时间为 1000 毫秒,最大等待时间为 5000 毫秒,并且在计算下一次等待时间时随机化。同时,我们还指定了一个回调函数,在每次重试时记录日志;以及一个 retryOnError 函数,用于判断是否应该对错误进行重试,这里只有当错误码为 500 或以上时才进行重试。

总结

p-retry 是一个非常实用的 npm 包,可以轻松地实现失败重试机制,提高程序的稳定性

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/50398

纠错
反馈