我正在运行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);
});