![](/img/trans.png)
[英]What is the best way to iterate multidimensional array in node.js/javascript?
[英]Iterate save in Node.JS across an array
我不能使用简单的for循环,因为request.save是一个函数。 所以我尝试了。 它完美地工作! 在添加request.save部分之前,我收到以下错误消息,该消息破坏了我的应用程序。
错误:发送标头后无法设置标头。
exports.submit = function (req, res) {
Person.find({
cellPhone: req.body.phone
}).exec(function (err, people) {
people.forEach(saveRequest);
}
function saveRequest(item, index) {
var request = new Requests();
request.start = req.body.start.value;
request.finish = req.body.finish.value;
request.phone = req.body.phone;
request.offDay = req.body.date;
request.user = people[index]._id;
request.name = people[index].name;
request.group = people[index].group;
request.save(function (err) {
if (err) {
console.log('request.save');
return res.status(400);
} else {
// Remove sensitive data before login
//user.password = undefined;
//user.salt = undefined;
console.log(request);
res.json(request);
}
});
}
});
问题是当您执行.save()时,您传递了一个匿名函数,该函数会在出现错误的情况下完成响应。
这样就完成了第一个保存事件错误。
您应该在save回调之外完成响应。
也许使用事件来同步您的代码,或者更好地使用生成器。
在forEach循环之前:
let savedResponses = [];
let savedErrors = [];
...
然后您保存的请求:
function saveRequest(item, index) {
var request = new Requests();
request.start = req.body.start.value;
request.finish = req.body.finish.value;
request.phone = req.body.phone;
request.offDay = req.body.date;
request.user = people[index]._id;
request.name = people[index].name;
request.group = people[index].group;
request.save(function (err) {
if (err) {
console.log('request.save error');
savedErrors.push(err);
// return res.status(400);
} else {
// Remove sensitive data before login
//user.password = undefined;
//user.salt = undefined;
console.log(request);
savedResponses.push(request);
}
});
}
然后,在forEach循环之后,您应该在.save()回调中等待异步工作人员的结尾。
您可以使用事件包或生成器或promise模式。
这取决于您节点的版本。
同步代码后,您可以先完成响应检查中的错误:
if (savedErrors.length > 0) {
res.status = 400;
// ... report errors
}
或仅使用saveedResponses完成响应。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.