我正在运行Node Js服务器,并从前端接收以下内容

 {
  dataType: "any",
  fechaI: "any",
  fechaF: "any",
  checkedList: [ "any obj","any obj"]
}


我必须遍历checkedList数组以获取其所有对象的action属性,然后利用导入进行查询

const query = require("./quieries.js")

query[item.action](req,res,resp,function(err,data){
            console.log(data)


        })


我想在迭代完成后使用查询的所有结果设置一个变量,我尝试使用async.each,但是查询返回未定义的对象。此外,我收到的内容的所有其他属性也将正确传递给查询项。

到目前为止我一直在尝试

    async.each(checkedList ,function(item,next){
       let results =[]

        query[item.action](req,res,resp,function(err,data){
            console.log(data)
            results.push(data)
            console.log(results)
            next()
        }.bind({results:results}))
    },function(err){
        if (err) console.log(err)
        console.log('done')
    })


console.log(data)的输出未定义,但是结果确实返回一个值,但它属于数组的最后一项。在这种情况下,我在做什么错?

最佳答案

查看代码后,我认为但不确定,您想要执行以下操作:



function whatever(){
  const listData = [];
  return new Promise((resolve, reject)=>{
    async.each(checkedList, (item, next)=>{
      query[item.action](req, res, resp, (err, data)=>{
        listData.push(data);
        if(listData.length === checkedList.length)resolve(listData);
        next();
      });
    }, err=>{
      console.log(err); reject(err);
    });
  });
}
whatever().then(listRes=>{
  console.log(listRes);
});





就个人而言,我只在获得所有结果后才调用函数,而不返回任何内容:



function whatever(doneFunc){
  const listData = [];
  async.each(checkedList, (item, next)=>{
    query[item.action](req, res, resp, (err, data)=>{
      listData.push(data);
      if(listData.length === checkedList.length)doneFunc(listData);
      next();
    });
  }, err=>{
     console.log(err);
  });
}
whatever(listRes=>{
  console.log(listRes);
});

10-08 06:21
查看更多