问题描述
下面是我使用 async/await
和 mongoose Transactions
的代码,这样每当 try/catch
捕获错误时,整个任务都会滚动 回来。在这条路线中,我调用了一个名为 sendMails2Client(data.email,eletopic,'Requirement Submitted','In Progress');
所以我想知道如何将 {session}
包含到这个方法中?
const { startSession } = require('mongoose');
router.route('/update-sources').get(async (req,res) => {
const session = await startSession();
if(req.query.selectedValue == 'In Progress')
{
try {
session.startTransaction();
var eletopic,eleStatus;
let data = await User.findOne({tag:"Client","Addtasks.commonID":req.query.commonIDs},{session})
if(data.alertInProgress == 'checked'){
data.Addtasks.forEach(async (element) => {
if(element.commonID == req.query.commonIDs)
{
eletopic = element.topic;
eleStatus = element.status
}
});
if(eleStatus == "Requirement Submitted")
{
await sendMails2Client(data.email,'In Progress');
console.log("data.status while sending mail to Client for Rev. Req.");
}
else if(eleStatus == 'Revision required')
{
await sendMails2Client(data.email,'Revision required','In Progress');
console.log("data.status while sending mail to Client for Rev. Req.");
}
}
else {
console.log("nothing happened!!!");
}
let success = await User.updateMany({"Addtasks.commonID":req.query.commonIDs},{$set: {"Addtasks.$.width" :'250px',"Addtasks.$.height" :'32px',"Addtasks.$.background" :'linear-gradient(45deg,#091B6A,#0029FF)',"Addtasks.$.border_radius" :'10px / 5px',"Addtasks.$.status" :req.query.selectedValue}},{session});
if (success) {
console.log("In Progress color set!");
let dataWriter = await User.findOne({tag:"Writer",{session})
dataWriter.Addtasks.forEach(async (element) => {
if(element.commonID == req.query.commonIDs)
{
await sendMails2User(dataWriter.email,element.topic,'In Progress');
let dataAdmin = await User.findOne({tag:"Admin",{session})
await sendMails2User(dataAdmin.email,'In Progress');
return res.end('{"success" : "Updated Successfully","status" : 200}');
}
})
}
} catch (error) {
console.log(error)
}
}
})
附言我还需要在 forEach
循环中包含 {session} 吗?如果是,那我也怎么做?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)