指数退避
在 Github 上编辑
指数退避是一种在计算机系统中用于处理重试和避免服务过载的技术。我们可以通过使用标准库提供的 `retry` 实用程序轻松实现这一点。
从 '@std/async' 导入 'retry' 实用程序。
import { retry, RetryError, type RetryOptions } from "jsr:@std/async";
一个将 'hello world' 记录到控制台并返回被拒绝的 Promise 的函数。
const fn = () => {
console.log("hello world");
return Promise.reject("rejected");
};
重试选项的配置,这将确保该函数在抛出错误之前最多被调用 3 次。第一次调用该函数将立即进行,第二次调用将在延迟 10 毫秒后发生,第三次/最后一次调用将在延迟 20 毫秒后进行。
const options: RetryOptions = {
maxAttempts: 3,
minTimeout: 10,
multiplier: 2,
jitter: 0,
};
try {
使用 'retry' 实用程序和重试配置包装该函数。
await retry(fn, options);
} catch (err) {
当最大尝试次数耗尽时,将抛出一个 RetryError,其中包含原始拒绝原因 'rejected' 作为其 cause 属性。
if (err instanceof RetryError) {
console.log("Retry error :", err.message);
console.log("Error cause :", err.cause);
}
}
使用 Deno CLI 在本地运行 此示例
deno run https://docs.deno.org.cn/examples/scripts/exponential_backoff.ts