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

如何用JavaScript回调递归实现setTimeout调用链式执行

递归实现回调链式调用的方案

当然可以用递归实现,既能避免嵌套回调的冗余,还能完全保留你原delay函数的回调链式逻辑。直接写一个递归函数逐个处理数组项即可:

function delayChainRecursive() {
    const items = [
        {message:"Waited 01 sec", time:1000},
        {message:"Waited 02 sec", time:2000},
        {message:"Waited 04 sec", time:4000},
        {message:"Waited 03 sec", time:3000}
    ];

    // 递归处理函数
    function processItem(index) {
        // 所有项处理完毕,输出结束信息
        if (index >= items.length) {
            console.log("Done Waiting");
            return;
        }
        // 调用delay,回调里递归处理下一项
        delay(items[index], function() {
            processItem(index + 1);
        });
    }

    // 从第一个项开始处理
    processItem(0);
}

逻辑说明

  • 定义processItem递归函数,接收当前处理的索引index
  • 当索引超出数组长度时,说明所有延迟任务执行完毕,输出Done Waiting
  • 否则调用你的delay函数,在回调里递归调用processItem处理下一个索引的项,以此形成回调链式的递归执行,效果和原嵌套回调完全一致,但不会因为数组变长而出现无限嵌套的冗余代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:40:36