回调不是使用节点 js 的异步模块的 mongodb 查询中的函数
Posted
技术标签:
【中文标题】回调不是使用节点 js 的异步模块的 mongodb 查询中的函数【英文标题】:callback is not a function in a mongodb query using node js´s async module 【发布时间】:2020-05-23 18:38:34 【问题描述】:我试图在 async each 循环中调用从另一个文件导出的函数,在该循环中它迭代传入数据的数组并相应地执行查询,如下所示:
const query = require('./queries')
function receive(req,resp ,doneFunc)
const listData = [];
let checkedList = req.body.checkedList
async.each(checkedList, (item, next)=>
//Every iteration gets a parameter called action from an object inside the array which is the
//name of the function needed
//
query[item.action](req, res, resp, (err, data)=>
listData.push(data);
if(listData.length === checkedList.length)doneFunc(listData);
next();
);
, err=>
console.log(err);
);
query[item.action]
中调用的函数结构如下
exports.any = function(res,callback)
MongoClient.connect(url,function (err, client)
let dbo = client.db("DB")
if(!err)
dbo.collection("collection",function(err ,coll)
coll.aggregate([
//make aggregation
]).toArray(function(err,data)
//execute callback when the aggregation has finished , this is where the error ocurrs
if(!err) return callback(null,data)
return callback(err,null)
)
)
else
return callback(err,null);
);
当 async.each 循环的执行到达对 query 的调用时,它会返回消息
TypeError: callback is not a function
at ...\server\routes\queries.js:385:37
应该在哪里执行 return callback(null,data)。 这个错误是什么原因,是函数设置错误还是执行方式错误?
【问题讨论】:
【参考方案1】:如果我理解了你的问题(尽管缺少很多代码来理解这个问题),那就是错误:
function(res,callback) // function signature
query[item.action](req, res, resp, (err, data)=> // function call
它们根本不匹配,您将res
作为callback
传递,而在函数内部则使用callback
(实际上是res
)作为函数。
【讨论】:
回调怎么可能不被识别? 同样是查询文件报错,而不是执行文件报错 如果我理解了您的代码,这应该是 Node.js VM 中的函数参数异常。你能改进你的问题来解释这个函数是如何以及在哪里被调用的吗?主要是query[item.action]
不是很清楚以上是关于回调不是使用节点 js 的异步模块的 mongodb 查询中的函数的主要内容,如果未能解决你的问题,请参考以下文章
node js - 当函数依赖于内部的异步函数时,如何从函数返回值
在 Node.js- 事件(EventEmitter 和 Listener Function 对象)与异步回调之间是不是有任何关系