我正在使用 mongoose.save() 更新 2 个文档,但我认为我所做的方式并不安全,据我所知,我需要使用异步来确保所有文档都被执行
// array containing the 2 documents from db
let schedules
let newItem = {
isActive: room.isActive,
name: room.roomname
};
// adding new items to nested array
schedules[0].rooms.push(newItem);
schedules[1].rooms.push(newItem);
// saving / updating documents
var total = schedules.length,
result = [];
function saveAll() {
var doc = schedules.pop();
doc.save(function(err, saved) {
if (err) throw err; //handle error
result.push(saved);
if (--total) saveAll();
else {
// all saved here
res.json(result);
}
});
}
saveAll();
任何解释如何正确地做到这一点
最佳答案
我们可以使用 promise.all
来实现此目的,但我们需要将您的 save
函数更改为基于 Promise 的函数
...
var total = schedules.length,
result = [];
function saveAll() {
const promises = schedules.map(schedule => save(schedule));
return Promise.all(promises)
.then(responses => {
// all saved processes are finished
res.json(responses);
})
}
// convert callback `save` function to promise based
function save(doc) {
return new Promise((resolve, reject) => {
doc.save((err, saved) => {
if (err) {
reject(err);
}
resolve(saved);
});
});
}
如果您可以使用async/await
,我们就可以使saveAll
函数更简洁
async function saveAll() {
const promises = schedules.map(schedule => save(schedule));
const responses = await Promise.all(promises);
res.json(responses);
}
希望对你有帮助
关于node.js - 使用 Mongoose 异步保存多个文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51862246/