很抱歉,我知道已经有一些帖子处理 NodeJS 中的嵌套 Promise 问题,但我仍然无法弄清楚这个。
我正在使用 Express 和 Mongoose,我想找到一个对象 ID,然后保存一个对象,然后更新另一个对象,但我不明白我应该如何做得更好,因为这些是依赖的 promise :
// Get Client object ID from email
Client.findOne({ email: req.body.clientEmail })
.exec()
.then((client) => {
// Then add Client ID to program and save
const program = new Program(req.body);
program.Client = client._id;
program.save()
// Finally add the program to the existing coach user
.then((program) => {
Coach.updateOne({ _id: req.session.userId }, { $push: { programs: program._id } },
function (err, coachUpdated) {
if (err) return handleError(err);
console.log(coachUpdated);
})
})
.then(() => { res.send('New program added!'); });
})
提前致谢
最佳答案
与异步/等待一起。使用 try/catch block 。
async function findClientAndUpdateCoach(req, res) {
try {
const client = await Client.findOne({ email: req.body.clientEmail }).exec();
const program = new Program(req.body);
program.client = client._id;
const result = await program.save() // Must be asynchronous in nature to prevent blocking..
Coach.updateOne({ _id: req.session.userId }, { $push: { programs: program._id } },
function (err, coachUpdated) {
if (err) return handleError(err);
console.log(coachUpdated);
res.send('New program added!');
});
}
catch (err) {
return handleError(err);
}
findClientAndUpdateCoach(req, res);
关于node.js - 如何避免多个 Mongoose 操作的嵌套 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58390124/