gpt4 book ai didi

node.js - 确保 forEach 循环在下一个命令 js 之前完成

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:34 25 4
gpt4 key购买 nike

抱歉,如果我只是太厚重了。我尝试过搜索功能,但对这一切都比较陌生,我正在努力找出解决方案。我想我可能没有搜索正确的关键字。

我的 Node.js 应用程序中有一条路由,其中​​有两个 forEach 循环。我希望 forEach 循环 1 完成,然后开始 forEach 循环 2。完成后,我想调用 res.redirect。目前,该路由直接进入 res.redirect,并且似乎没有完成 forEach 循环。

代码:

// Auto-populate entries
router.post("/populate", middlewareObj.isLoggedIn, function(req, res) {
var baseData = []
//lookup Plan using ID
Plan.findById(req.params.id, function(err, foundPlan) {
if (err) {
console.log(err);
res.redirect("/plans");
} else {
BaseData.find({
"contributingRegion": foundPlan.contributingRegion
}, function(err, foundRecords) {

foundRecords.forEach(function(record) {
baseData.push(record)
baseData.save
});

//Create entries & push into plan
baseData.forEach(function(data) {
if (includes(req.body.orgs, data.org)) {
Entry.create(data, function(err, entry) {
if (err) {
console.log(err);
} else {
entry.author.id = req.user._id;
entry.author.username = req.user.username;
entry.save();
foundPlan.planEntries.push(entry);
foundPlan.save();
}
})
}
})

res.redirect('/plans/' + foundPlan._id);
});
}
});
});

最佳答案

有很多方法可以实现此目的,例如您可以使用 promisesasync module ,您还可以使用recurrent functions ,我将提供 async 模块的解决方案,因为它可以让您了解异步函数如何工作以及如何控制它们:

async.each( baseData, function (data, next) {

if (includes(req.body.orgs, data.org)) {

Entry.create(data, function(err, entry) {

if (err) {
// stop iterating and pass error to the last callback
next(err);
} else {
entry.author.id = req.user._id;
entry.author.username = req.user.username;
entry.save();
foundPlan.planEntries.push(entry);
foundPlan.save();
// next iteration
next();
}

});

} else {
// next iteration
next();
}

}, function (err) {

// This function runs when all iterations are done

if (err) throw err;

res.redirect('/plans/' + foundPlan._id);

} );

关于node.js - 确保 forEach 循环在下一个命令 js 之前完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48464355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com