Javascript nodeJS中的循环问题
我在nodeJS中有一个循环,需要处理sequelize查询的结果。 我认为必须使用promise或other,因为代码只针对最后一条记录执行 代码是:Javascript nodeJS中的循环问题,javascript,node.js,Javascript,Node.js,我在nodeJS中有一个循环,需要处理sequelize查询的结果。 我认为必须使用promise或other,因为代码只针对最后一条记录执行 代码是: pages.forEach(函数(第页){ findOne({属性:['html','template','permalink'], 其中:{id:page.id})。然后(obj=>{ html=obj.html; permalink=obj.permalink; 模板=obj.template; var变量=[]; console.log(
pages.forEach(函数(第页){
findOne({属性:['html','template','permalink'],
其中:{id:page.id})。然后(obj=>{
html=obj.html;
permalink=obj.permalink;
模板=obj.template;
var变量=[];
console.log(“PERMALINK”,PERMALINK);//以下代码仅对最后一条记录运行
db.PageVariable.findAll({
属性:['variable\u name','variable\u value'],
raw:是的,
其中:{id_page:page.id}
}).然后(功能(项目){
console.log(“--------------”;
//.......
}).catch(函数(err){
控制台日志(err);
});
});
});
如何修改循环以使其正常工作?您可以使用wait(仅适用于async功能)等待承诺解决或拒绝,请参阅更多: 您可以按如下方式使用它:
async function doStuff(page) {
let result = await //your db calls
// "done!"
}
for (page of pages) {
// Do something
await doStuff(page);
}
注意:
const tasks = asyncThingsToDo.map(runTask); // Run all tasks in parallel.
const results = await Promise.all(tasks); // Gather up the results.
results.forEach(x => console.log(x)); // Print them out on the console.
尝试将
页面
处理放在一个返回承诺的函数中,如下所示:
const getPagePromise=page=>
db.Page.findOne({
属性:['html','template','permalink'],
其中:{
id:page.id
}
}).然后(obj=>{
html=obj.html;
permalink=obj.permalink;
模板=obj.template;
var变量=[];
console.log(“PERMALINK”,PERMALINK);//以下代码仅对最后一条记录运行
返回db.PageVariable.findAll({
属性:['variable_name','variable_value'],
raw:是的,
其中:{
id\u页面:page.id
}
}).然后(功能(项目){
console.log(“--------------”;
//.......
}).catch(函数(err){
控制台日志(err);
});
});
});
然后map
将您的页面
数组映射到一个承诺数组(如前面定义的承诺),如下所示:
const allPagesPromises=pages.map(getPagePromise);
最后,使用Promise.all
来解决/拒绝所有承诺
Promise.all(所有页面推荐)
.then(allResults=>{//Do stuff})
.catch(err=>{//Handle errors});
注
考虑避免过多的回调嵌套,比如在处理页面时。相反,将逻辑拆分为返回承诺的小函数,这将使事情更易于阅读/调试。期望的结果或输出是什么?缺少太多代码,无法查看您试图通过循环完成的任务。我需要对所有记录执行代码,而不是仅对所有记录执行最后一个。无论您试图做什么来累积结果,都只是在累积一个结果,所以您必须向我们展示代码。现在,这个问题是无法回答的,因为没有足够的信息说明您试图实现的结果。这并不是回答问题,只是说明async await是如何工作的。更不用说你在一个循环中使用wait,这是一个很大的禁忌…@DanStarns,谢谢你的更正。实际上,它是现代的。。其中的将按预期工作(编辑相同)。不,这仍然无效,您应该使用