我不知道为什么它首先打印data return
而不是完成循环
代码
exports.put = async function (req, res, next) {
const data = Array.from(req.body);
let errors = false;
data.forEach(async (update, index) => {
try {
const result = await TypeofAccount.findByIdAndUpdate(
new mongoose.Types.ObjectId(update._id),
{
$set: { name: update.name },
},
{ new: true, runValidators: true },
);
console.log(index);
if (!result) {
errors = true;
console.log('errors');
return res.status(500).send();
}
} catch (e) {
return res.status(500).send();
}
});
console.log('data return');
res.json(data);
};
答案 0 :(得分:0)
.for每个函数都是异步运行的,这就是为什么您可以看到在循环被首先打印后看到的console.log的原因
答案 1 :(得分:0)
发生此问题是因为您正在使用forEach
循环,asyc等待不与forEach
一起使用,为避免此问题,您的代码块应该像
for(let i in data){
try {
const result = await TypeofAccount.findByIdAndUpdate(
new mongoose.Types.ObjectId(data[i]._id),
{
$set: { name: data[i].name },
},
{ new: true, runValidators: true },
);
console.log(i);
if (!result) {
errors = true;
console.log('errors');
return res.status(500).send();
}
} catch (e) {
return res.status(500).send();
}
}