Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用async js在数组上迭代,并在回调中执行函数以返回单个结果_Javascript_Node.js_Async.js - Fatal编程技术网

Javascript 使用async js在数组上迭代,并在回调中执行函数以返回单个结果

Javascript 使用async js在数组上迭代,并在回调中执行函数以返回单个结果,javascript,node.js,async.js,Javascript,Node.js,Async.js,我正在运行Node Js服务器,并从前端接收以下内容: { dataType: "any", fechaI: "any", fechaF: "any", checkedList: [ "any obj","any obj"] } 我必须迭代checkedList数组,以获取其所有对象的action属性,然后使用import进行查询 const query = require(&q

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

{
  dataType: "any",
  fechaI: "any",
  fechaF: "any",
  checkedList: [ "any obj","any obj"]
}
我必须迭代
checkedList
数组,以获取其所有对象的
action
属性,然后使用import进行查询

const query = require("./queries.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(数据)的输出,但是结果返回值,但它属于数组的最后一项。在这种情况下,我做错了什么?

在查看了您的代码后,我认为,但不确定您是否希望执行以下操作:

函数{
常量listData=[];
返回新承诺((解决、拒绝)=>{
async.each(选中列表,(项目,下一个)=>{
查询[项目操作](请求、回复、响应,(错误、数据)=>{
listData.push(数据);
if(listData.length==checkedList.length)解析(listData);
next();
});
},err=>{
console.log(错误);拒绝(错误);
});
});
}
whatever()。然后(listRes=>{
console.log(listRes);

});也可以使用常规循环,因为您希望在所有这些异步执行之后得到结果。否则,创建一组承诺并使用
Promise.all()
。因此,我必须使查询成为承诺,然后我应该将结果映射到数组?哦,我知道您想要执行
query
s。保持
异步
循环是有意义的。将
查询
包装成一个承诺,即
结果后解决
d。推送(数据)
。然后把所有这些承诺都传递到Promise.all()
。你能回答一下吗?当我有一个包含两个或更多项的数组时,函数会返回一个错误,说“error:Callback已经被调用了”`