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

实现JS延迟执行函数报TypeError [ERR_INVALID_CALLBACK]如何修复

问题原因

你代码的报错核心是setTimeout第一个参数接收的不是合法可执行函数:
你在调用setTimeout(callback(data), delay)时,直接执行了callback(data),拿到的是cb函数的返回值undefined,相当于给setTimeout传的第一个参数是undefined,自然触发ERR_INVALID_CALLBACK类型错误。

修复方案

有两种常用修复方式:

方案1:用匿名函数包裹回调调用

把需要执行的逻辑放到匿名函数里,等延迟结束后再执行:

let cb = function(x) {
  console.log(x);
};

const doShortly = function(callback, delay, data) {
  // 把callback调用放到匿名函数里,延迟到setTimeout触发时再执行
  let result = setTimeout(() => callback(data), delay);
  return result;
};

console.log(doShortly(cb, 500, 'hi'));

方案2:使用setTimeout原生传参能力

setTimeout从第三个参数开始的所有值,都会作为入参自动传给第一个参数的回调函数,代码可以更简洁:

let cb = function(x) {
  console.log(x);
};

const doShortly = function(callback, delay, data) {
  // 直接把data作为第三个参数传给setTimeout
  let result = setTimeout(callback, delay, data);
  return result;
};

console.log(doShortly(cb, 500, 'hi'));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:15:02