gpt4 book ai didi

javascript - 在 Node.JS 中跨数组迭代保存

转载 作者:行者123 更新时间:2023-12-03 06:17:42 25 4
gpt4 key购买 nike

我无法使用简单的 for 循环,因为 request.save 是一个函数。所以我尝试了 forEach。它工作完美!直到我添加 request.save 部分,我收到以下错误消息,该消息破坏了我的应用程序。

错误:发送后无法设置 header 。

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 = [];
...

然后你保存的请求:

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 模式。

这取决于您的 Node 版本。

同步代码后,您可以先完成响应检查是否有错误:

if (savedErrors.length > 0) {
res.status = 400;
// ... report errors
}

或者只是使用savedResponses完成响应。

关于javascript - 在 Node.JS 中跨数组迭代保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39019997/

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