thinkjs之事务的使用

核心:

实例化model

在model层使用事务

  1. 使用try...catch方法
module.exports = class extends think.Model {
  async addData() {
    // 如果添加成功则 commit,失败则 rollback
    try {
      await this.startTrans();
      const result = await this.add({});
      await this.commit();
      return result;
    } catch(e){
      await this.rollback();
    }
  }
}
  1. 使用model.transaction(fn)方法
module.exports = class extends think.Model {
  async updateData(data){
    const result = await this.transaction(async () => {
      const insertId = await this.add(data);
      return insertId;
    })
  }
}

在controller层使用

  1. 使用try...catch方法
let model = this.model('aaa');
try{
  await model.startTrans();
  await model.add({name: 'xxx'});
  //那如果一个事务中涉及到多个model会怎么处理呢?如下:
  let model2 = this.model('bbb').db(model.db());
  await model2.add({title: 'yyyy'});
  await model.commit();
}catch(e){
  await model.rollback();
}
  1. 使用model.transaction(fn)方法
let model = this.model('aaa');
await model.transaction(async () => {
   await model.add({name: 'wwww'});
   //那如果一个事务中涉及到多个model会怎么处理呢?如下:
   let model2 = this.model('bbb').db(model.db());
   await model2.add({title: 'yyyy'})
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值