【发布时间】:2020-02-06 01:37:38
【问题描述】:
我正在运行一个 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 但查询返回未定义的对象。此外,我获得的内容的所有其他属性也没有正确传递给查询项。
这是我迄今为止尝试过的:
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 确实返回了一个值,但它属于数组的最后一项。在这种情况下我做错了什么?
【问题讨论】:
-
也可以使用常规循环,因为您希望在所有这些异步执行之后得到结果。否则,创建一堆 Promise 并使用
Promise.all()。 -
所以我必须让查询成为一个承诺,然后我应该将结果映射到数组?
-
哦,我知道你想做
querys。保持async循环是有意义的。将query包装在一个Promise 中,即resolved 在results.push(data)之后。然后将所有这些承诺传递给Promise.all()。 -
你能回答那看起来怎么样吗?会很有帮助的
标签: javascript node.js async.js