You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

async.retry函数使用求助:为何仅执行一次(预期出错重试3次)

问题分析与修复方案

核心错误点

  • 任务函数绑定逻辑错误:你通过bind给callFunc提前传入了自定义callback,导致async.retry无法注入它需要的重试控制回调。async.retry要求任务函数的最后一个参数必须由它提供,用来判断是否触发重试。
  • 回调参数顺序(次要):虽然你传递错误对象的逻辑没问题,但async标准回调格式是callback(err, result),你写的callback(errorObj, null)可以简化为callback(errorObj),因为第二个参数在失败场景下可忽略。

修正后的代码

var async = require('async');

function callFunc(data, time, name, callback) {
    console.log("#");
    // 传入错误对象,触发重试逻辑
    callback({ message: data, time, name });
    // 模拟成功时改为:callback(null, { message: "ok" });
}

// 仅绑定固定参数,留最后一个callback位置给async.retry注入
var func = callFunc.bind(null, "data", "time", "name");

async.retry({ times: 3, interval: 1000 }, func, function (err, results) {
    console.log('===================================');
    console.log('最终错误:', err);
    console.log('Async function 执行完成');
});

修正说明

  1. 绑定callFunc时只传入前三个固定参数,不自定义callback,让async.retry在每次调用时自动传入控制重试的回调函数。
  2. 当callFunc的callback传入非null错误时,async.retry会按照配置的times(3次)和interval(1秒)执行重试,控制台会打印3个#。
  3. 最终回调会接收最后一次重试的错误对象,若某次调用成功(callback第一个参数为null),则直接返回结果并终止重试。

内容的提问来源于stack exchange,提问作者Froggy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 13:30:42