查询执行后调用toClient回调返回响应报错:TypeError: toClient is not a function
解决回调函数调用的类型错误问题
嘿,我一眼就看出你代码里的问题了——你定义的queryEx函数明明需要接收一个回调参数,但最后调用它的时候却空着手调用了queryEx(),根本没把toClient传进去!这就导致queryEx内部的toClient变量是undefined,调用undefined()可不就抛出“不是函数”的错误嘛。
修正后的代码
直接把调用时的参数补上就好,另外我建议把queryEx的参数名改成callback,避免和外部的toClient混淆,可读性更强:
router.get('/', function (req,res) { let packet = sp.mapper(req); let output = null; function toClient() { res.send(output); } function queryEx(callback) { output = QueryExe.execute(packet); callback(); } // 关键:调用时传入toClient函数 queryEx(toClient); })
额外提醒(如果是异步场景)
要是QueryExe.execute是异步操作(比如数据库查询、API请求这类),你现在的写法会有坑——同步执行的话output能被正常赋值,但异步的话可能output还是null就调用toClient发送响应了。这种情况得把回调放到execute的异步回调里,比如:
function queryEx(callback) { // 假设QueryExe.execute支持回调参数 QueryExe.execute(packet, function(result) { output = result; callback(); }); }
内容的提问来源于stack exchange,提问作者Richardson V Johnson
相关产品推荐
相关产品推荐

