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

在Node-RED中创建全局变量时遇‘Callback must be a function’错误求助

问题原因与解决办法

错误Error: Callback must be a function是因为你误用了global.set的调用格式。Node-RED的global.set函数不支持一次性传入多个变量名来设置全局变量,它的正确用法有两种:

  • 单次设置一个键值对:global.set(键名, 值)
  • 传入一个对象批量设置:global.set({键1: 值1, 键2: 值2})

你的代码里连续传入多个字符串参数,Node-RED会把第三个参数当成可选的回调函数,但你传的是字符串,不符合要求,因此触发错误。

修改后的代码示例

方式一:多次调用global.set

// Code added here will be run once
// whenever the node is started.
if (global.get("GlobalFlag") !== undefined)  
{  
   node.warn("Globals exist");  
}  
else  
{  
 global.set("FullAuto_Zone1_Runtime", ""); // 替换为你需要的初始值,比如空字符串、0等
 global.set("FullAuto_Zone2_Runtime", "");
 global.set("FullAuto_Zone3_Runtime", "");
 global.set("FullAuto_Zone4_Runtime", "");
 // 设置GlobalFlag标记,避免重复初始化
 global.set("GlobalFlag", true);
}  

方式二:批量设置(推荐)

// Code added here will be run once
// whenever the node is started.
if (global.get("GlobalFlag") !== undefined)  
{  
   node.warn("Globals exist");  
}  
else  
{  
 global.set({
   "FullAuto_Zone1_Runtime": "",
   "FullAuto_Zone2_Runtime": "",
   "FullAuto_Zone3_Runtime": "",
   "FullAuto_Zone4_Runtime": ""
 });
 // 设置GlobalFlag标记
 global.set("GlobalFlag", true);
}  

注意:原代码未设置GlobalFlag,即使创建了其他全局变量,下次启动时仍会进入else分支,记得加上global.set("GlobalFlag", true)来标记全局变量已完成初始化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:33:27