回调不是使用节点 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 查询中的函数的主要内容,如果未能解决你的问题,请参考以下文章

如何优雅的处理Nodejs中的异步回调

node js - 当函数依赖于内部的异步函数时,如何从函数返回值

如何将节点中的异步回调添加到函数调用?

在 Node.js- 事件(EventEmitter 和 Listener Function 对象)与异步回调之间是不是有任何关系

利用async和await异步操作解决node.js里面fs模块异步读写,同步结果的问题

requireJS异步加载