retry
在异步函数失败时重试
535 bytes
since v12.1.0
使用方法
retry 函数运行异步函数,如果失败则重试。您可以指定重试次数、重试间隔时间以及是否使用指数退避。
选项
times是最大重试次数(默认:3)delay是重试间隔的毫秒数backoff是用于计算重试间隔的函数- 它接收尝试次数(从
1开始)并返回以毫秒为单位的延迟时间。
- 它接收尝试次数(从
signal(v12.3.0+)允许您传递AbortController.signal来中断重试操作
import * as _ from "radashi";
const api = { users: { async list() { if (Math.random() < 0.5) { throw new Error("Random error"); } return []; }, },};
await _.retry({}, api.users.list); // 失败前尝试3次await _.retry({ times: 10 }, api.users.list); // 失败前尝试10次await _.retry({ times: 2, delay: 1000 }, api.users.list); // 尝试2次,间隔1秒
// 指数退避await _.retry({ backoff: (i) => 10 ** i }, api.users.list); // 尝试3次,延迟分别为10、100、1000毫秒中断
如果传递了 signal,重试操作可以被中断。当信号被中止时,retry 的 promise 将以 DOMException(即使在 Node.js 中)拒绝,消息为 This operation was aborted,名称为 AbortError。
import * as _ from "radashi";
const abortController = new AbortController();const signal = abortController.signal;
const promise = _.retry({ times: 3, delay: 1000, signal }, api.users.list);
// 立即停止重试:abortController.abort();
try { await promise;} catch (err) { if (err.message === "This operation was aborted") { console.log("重试操作被中止"); }}