обратный вызов не является функцией в запросе mongodb с использованием модуля узла js asyn c - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь вызвать функцию, экспортированную из другого файла в asyn c каждый l oop, в которой она выполняет итерацию по массиву входящих данных и выполняет соответствующие запросы следующим образом:

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);
        }
    });


}

Когда выполнение asyn c .each l oop достигает call для query возвращает сообщение

TypeError: callback is not a function
    at ...\server\routes\queries.js:385:37

Именно там, где return callback (null, data) должен быть выполнен. В чем причина этой ошибки, неправильно установлена ​​функция или неправильно?

1 Ответ

0 голосов
/ 07 февраля 2020

Если я понял ваш вопрос (несмотря на отсутствие кода, достаточного для понимания вопроса), это ошибка:

function(res,callback){                             // function signature

query[item.action](req, res, resp, (err, data)=>{   // function call

Они вообще не совпадают, вы передаете res как callback и внутри функции вы используете callback (что на самом деле res) в качестве функции.

...