javascript - 使用异步 js 迭代数组并在回调中执行函数以返回单个结果

标签 javascript node.js async.js

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

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

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

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

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

我想在迭代完成后设置一个包含查询所有结果的变量,我尝试使用 async.each 但查询返回 undefined object 。此外,我获得的内容的所有其他属性都没有正确传递给查询项。

这是我迄今为止尝试过的:

    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) 的输出未定义,但 results 确实返回一个值,但它属于数组的最后一项。在这种情况下我做错了什么?

最佳答案

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

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

关于javascript - 使用异步 js 迭代数组并在回调中执行函数以返回单个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60086539/

相关文章:

javascript - 如何使用 date-fns 查找当月的今天是否大于当月的特定日期

javascript - 如何迭代请求调用并将结果存储在对象中?

javascript - 如果传递 null 则不会调用 Put 回调

mysql - 有没有比使用 MySQL Schedule events 更好的方法来更新数据库表中的列?

javascript - 为什么 app.use(...) 不能在异步函数中声明?

node.js - Async.js 跳出系列

JavaScript module.exports 回调

javascript - JQuery 在多个 Div 上显示/隐藏

Javascript 变量声明和谷歌地图

javascript - 如何在php文件中追加数据