当我们在前端开发中调用后端接口时,难免遇到网络请求失败的情况,这时我们通常会使用 retry(重试) 功能来增加接口的可靠性。在 Node.js 中,有一个非常实用的 npm 包叫做 retry-if-fails,它可以帮助我们轻松地实现请求重试功能。
安装和引入
npm install retry-if-fails
const retry = require('retry-if-fails');
基本用法
retry-if-fails 是一个非常易于使用的 npm 包,它提供了两个函数,分别是 retryIfFails 和 retryIfFailsAsync。
retryIfFails
retryIfFails 用于同步函数的重试。它的基本用法如下:
-- -------------------- ---- ------- ----- ------ - ------------------- -- -- - -- ------- -- ------------ -- - -------- -- -- --------- - - ------- -- -- --------------------- ------ ----- - -------- ------- -------- -- - -- --------- -- -- --
retryIfFailsAsync
retryIfFailsAsync 则是用于异步函数的重试。它的基本用法如下:
-- -------------------- ---- ------- ----- ------ - ----- ------------------------ ----- -- -- - -- --------- -- ------------ -- - -------- -- -- --------- - - ------- -- -- --------------------- ------ ----- - -------- ------- -------- -- - -- --------- -- -- --
高级用法
自定义判定异常的函数
通过 retries 字段可以控制重试的次数,但是可能会出现重试的次数过多的情况,需要对请求异常做精细地控制。这时可以设置 shouldRetry 函数,它是一个可选的函数,用于在请求失败时确定是否需要重试。
shouldRetry 函数具有如下签名:
(error: any, attempt: number) => boolean
- error: 请求失败时获取到的错误对象
- attempt: 当前请求的次数,从 1 开始计数
shouldRetry 函数返回 true 表示重试,返回 false 表示不需要重试。
这里我们实现一个自定义 shouldRetry 函数来控制在遇到网络连接被拒绝的情况时只重试一次:
-- -------------------- ---- ------- ----- ----------- - -- ----- ----------- - ------- -------- -- - -- ----------- --- -------------- -- ------- - ------------ - ------ ----- - ------ ------ -- ----- ------ - ------------------- -- -- - -- ------- -- ------------ -- - -------- -- ------------ ------- -- -------- ------- -------- -- - -------------- ---------- -------------------- -- -- --
其他选项的详解
retries
retries 控制请求失败时的重试次数,它的默认值是 3 次。当 retries 设为 0 时表示关闭重试功能。
factor
factor 控制重试的时间间隔,默认是 2 倍上一次重试的时间间隔。一般 factor 的值应该大于等于 1。
如果不想设置固定的时间间隔而是想使用指数级递增的时间间隔,可以使用 theorecticalDelay 字段。theorecticalDelay 用于表示每次重试后的最小时间间隔,而实际的时间间隔会在这个基础上进行微小的调整。theorecticalDelay 的默认值是 1000 毫秒。
onRetry
onRetry 是每次请求失败后的回调函数。它具有如下签名:
(error: any, attempt: number) => void
- error: 请求失败时获取到的错误对象
- attempt: 当前请求的次数,从 1 开始计数
它可以用于在请求失败时输出特定的日志,方便跟踪问题。
总结
retry-if-fails 是一个简单易用的 npm 包,它能帮助我们轻松地实现请求重试功能。我们可以在使用它的基础上进一步实现自己的异常处理逻辑,提高前端代码的可靠性和健壮性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066b5951ab1864dac66ecb