在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
相关产品推荐
相关产品推荐

