Javascript 如何在异步函数中添加Sequalize.js事务

Javascript 如何在异步函数中添加Sequalize.js事务,javascript,sequelize.js,Javascript,Sequelize.js,到目前为止,我没有将事务添加到我的项目中。现在我把我的自我提升到那个水平。 如果我需要更新master表、details表和logs表,我会这样做 export async function create(req,res,next){ try{ const add_to_master_table = await db.Inovice_master.create(); const add_to_detail_table = await db.Invoice_detail

到目前为止,我没有将事务添加到我的项目中。现在我把我的自我提升到那个水平。

如果我需要更新master表、details表和logs表,我会这样做

export async function create(req,res,next){
    try{

    const add_to_master_table = await db.Inovice_master.create();

    const add_to_detail_table = await db.Invoice_detail.create();

    const add_to_user_logs = await db.User_logs.create();

    res.sendStatus(200);

    }catch(error){
        res.sendStatus(500);
    }
}
在Sequalize文档中,事务是这样的

返回sequelize.transaction(函数(t){
//在此处链接所有查询。确保返回它们。
返回User.create({
名字:“亚伯拉罕”,
姓:“林肯”
},{transaction:t})。然后(函数(用户){
return user.setShooter({
名字:“约翰”,
姓氏:“布思”
},{transaction:t});
});
}).然后(函数(结果){
//事务已提交
//结果是承诺链返回到事务回调的结果
}).catch(函数(err){
//事务已回滚
//err是承诺链返回到事务回调的被拒绝的内容

});你可以这样写下来

return sequelize.transaction(async (t) =>  {

  let user = await User.create({firstName: 'Abraham', lastName: 'Lincoln'}, { transaction: t })
  user = await user.setShooter({ firstName: 'John', lastName: 'Boothe'}, { transaction: t });
  return user
})
我更喜欢使用CLS机制进行事务传递,您也不必将事务传递给每个查询


你可以用这种方式写下来

return sequelize.transaction(async (t) =>  {

  let user = await User.create({firstName: 'Abraham', lastName: 'Lincoln'}, { transaction: t })
  user = await user.setShooter({ firstName: 'John', lastName: 'Boothe'}, { transaction: t });
  return user
})
我更喜欢使用CLS机制进行事务传递,您也不必将事务传递给每个查询


警告一句:CLS机制不适用于Sequelize 3中的异步/等待事务。我希望它在Sequelize 5中得到修复,但我还没有尝试过。警告一句:CLS机制不适用于Sequelize 3中的异步/等待事务。我希望它在Sequelize 5中得到修复,但我还没有尝试过。