【发布时间】:2019-11-05 17:45:23
【问题描述】:
因此,阅读Instance 上的 Sequelize 文档以及有关 transactions 的文档,sequelize.transaction() 将 autoCallback 函数作为参数。文档说:
回调是用事务对象调用的,应该返回 一个承诺。如果 promise 得到解决,则事务提交;如果 promise 拒绝,事务回滚
但是我计划在事务内部做很多事情,我想避免回调地狱。所以我试着做
try {
let result = sequelize.transaction({
isolationLevel: 'SERIALIZABLE'
}, async t => {
// code to run here with await
let var1 = await Model.find({ transaction: t });
let var2 = await Model.find({ transaction: t });
if (var1.id === 1)
return "Whatever result";
else
throw new Error("Something wicked");
}
)});
// Whatever result
console.log(result);
}catch(e){
// Something wicked
}
这似乎工作得很好。但它完全没有记录,我还没有看到有人使用它。可以吗,还是我会遇到随机问题?
【问题讨论】:
-
不确定您所说的“完全无证”是什么意思。文档说“应该返回一个承诺”,而您使用的是
async function,所以一切都很好? -
@Bergi 是的,我希望一切都好。我只是要求确认。如果我理解正确,我不能从异步回调函数返回一个承诺(如 return Model.find()),但我必须始终返回一个值本身(如 return await Model.find()),对吗?
-
@michnovka 每个异步函数都会返回一个承诺。如果 Model.find 返回一个 promise,那么
return Model.find()和return await Model.find()之间没有显着差异。
标签: javascript node.js async-await sequelize.js