Javascript 使用async js在数组上迭代,并在回调中执行函数以返回单个结果
我正在运行Node 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
{
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已经被调用了”`