Node.js传入同对象下的函数作为回调出现undefined报错求解
错误原因
1. 回调调用逻辑错误
你在testing方法中给read传参时写的data.volatile.modularVariables.readCB(data)是立即执行回调函数,而非传递函数引用给fs.readFile做后续异步调用。
且你调用时仅传入1个参数,对应readCB的形参列表(err, data)会出现赋值错位:
- 形参
err接收到你传入的全局data对象 - 形参
data被赋值为undefined
所以你在readCB中访问data.volatile时,实际访问的是值为undefined的形参data,直接触发报错。
2. 变量命名冲突
你的回调函数readCB的第二个形参命名为data,和全局定义的data对象重名,函数作用域内会优先读取形参的data而非全局对象。就算后续异步正常触发回调,读取成功时形参data是文件内容字符串/Buffer,也不存在volatile属性,依然会报错。
修复方案
- 先修改
readCB的形参名,避免命名冲突,同时注意报错时应该打印err而非文件内容:
// 代码开头需先引入fs模块:const fs = require('fs') readCB: (err, fileContent)=>{ if(err){ console.log(`%c${data.volatile.debug.debugStrings.errCodes.read}: Error reading from file`,'color: red'); console.log(err); } // 读取成功后可以在这里处理fileContent(文件内容) },
- 修改
testing方法的传参逻辑,直接传回调函数的引用即可,不要加括号主动调用,fs.readFile读取完成后会自动给回调传入err和文件内容两个参数:
testing() { data.volatile.modularVariables.read(data.persistent.paths.srcRoot,data.volatile.modularVariables.encoding.utf8,data.volatile.modularVariables.readCB); };
内容的提问来源于stack exchange,提问作者4N0M41Y
相关产品推荐
相关产品推荐

