我正在运行 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/