在Node.JS中跨数组迭代save
Iterate save in Node.JS across an array
我不能使用一个简单的for循环,因为请求。Save是一个函数。所以我尝试了每一个。它工作得很完美!直到我加入请求。保存部分,我得到以下错误消息,破坏了我的应用程序。
错误:cannot set header after their sent.
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()时,您传递了一个匿名函数,该函数在出现错误时完成响应。
所以你完成了第一个保存事件错误。
您应该在保存回调之外完成响应。
也许可以使用事件来同步你的代码,或者最好使用生成器。
forEach循环前:
let savedResponses = [];
let savedErrors = [];
...
然后你的savedRequest:
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
}
或者直接使用savedResponses完成响应。
相关文章:
- 使用嵌入式数组迭代JSON
- 节点.js异步数组迭代
- jQuery 数组迭代
- Javascript:(ES5)数组迭代的权威指南
- Javascript 数组迭代
- JavaScript 数组迭代方向
- 是否可以在 ES6 Set 实例上使用数组迭代方法
- Javascript 中的数组迭代问题
- javascript 2D数组迭代返回未定义的函数参数
- 返回数组迭代
- 这对于数组元素上的简单数组迭代操作来说是最有效的
- 数组迭代陷阱
- JavaScript数组-迭代问题
- JavaScript For循环数组迭代问题-使用一个循环与两个循环
- 如何克服javascript数组迭代跳过记录/秒
- 将数组迭代到自定义网格中
- 在Node.JS中跨数组迭代save
- 数据可见性的数组迭代- javascript
- 在数组迭代中迭代对象键
- 使用数组迭代对象属性