跳转到内容
搜索文档

更新日志

Cloudflare 的最新更新与改进。

Back to all posts

Workflows 现在在重试时支持延迟函数

通过 Workflows,您可以为每个步骤配置内置的重试行为。以前,您可以配置具有固定延迟时长(例如秒、分钟或小时)的步骤重试,以及诸如 constantlinearexponential 之类的退避策略。

步骤重试现在支持动态延迟函数。您无需仅选择基本延迟和退避策略,而是可以向 retries.delay 传递一个函数,并根据失败的尝试和抛出的错误计算下一次延迟。

当重试需要取决于故障类型时,这非常有用。您的 Workflow 可能需要在遇到速率限制错误后等待更长时间,但在发生短暂的网络故障后能更快地进行重试。如果下游 API 在其错误消息中返回了 Retry-After 值,延迟函数也可以适应提供商的指导。

await step.do(
	"sync customer",
	{
		retries: {
			limit: 5,
			delay: ({ ctx, error }) => {
				if (error.message.includes("rate limit")) {
					return `${ctx.attempt * 30} seconds`;
				}

				return "10 seconds";
			},
		},
	},
	async () => {
		await syncCustomer();
	},
);
await step.do(
	"sync customer",
	{
		retries: {
			limit: 5,
			delay: ({ ctx, error }) => {
				if (error.message.includes("rate limit")) {
					return `${ctx.attempt * 30} seconds`;
				}

				return "10 seconds";
			},
		},
	},
	async () => {
		await syncCustomer();
	},
);

动态延迟函数可以返回一个持续时间字符串、一个数字或一个解析为持续时间的 Promise。使用它们可以添加自适应重试行为,而无需编写单独的队列或调度逻辑。有关更多信息,请参阅休眠和重试