唐伯虎 发表于 2021-6-28 17:46:06

thinkjs使用事务

  首先需要警告下朋友们,千万别去thinkjs官网群里面去问那些大佬,个别大佬的脾气是真的惹不起系列。比如:


  行了,不扯没用的了,但是说实话真的是在官网群里面被气死了。【手动微笑】
  下文当中有任何疑问问题请在评论区评论,笔者会在第一时间回复。或者进入笔者技术交流群互动:react:815413387,vue:942347564,JAVA:830645840。
1.model中使用手工操作事务
async addData(data) {
// 如果添加成功则 commit,失败则 rollback
try {
    await this.startTrans();
    const result = await this.add(data);
    await this.commit();
    return result;
} catch(e){
    await this.rollback();
}
}
2.model中使用transaction
async updateData(data){
const result = await this.transaction(async () => {
    const insertId = await this.add(data);
    // 通过 db 方法让 other_model 模型复用当前模型的数据库连接
    const otherModel = this.model('other_model').db(this.db());
    const addRes = await otherModel.add({user_id: insertId, cate_id: 100});
    return addRes;
})
}
3.controller中使用手工操作事务
async xxxAction() {
const data = this.post();
// 一定要保证三个或N个在一次连接中进行
const salesRecord = this.ctx.model('sales_record');
const salesRecordItem = this.ctx.model('sales_record_item').db(salesRecord.db());
const members = this.ctx.model('members').db(salesRecord.db());

// 使用try catch捕捉错误
try {
await salesRecord.startTrans(); // 开启事务
const submitRecordRes = await salesRecord.submitSalesRecord(data);
await salesRecordItem.addMany(data.items);
await salesRecord.commit(); // 一切正常就提交
} catch (e) {
await salesRecord.rollback(); // 出错了就rollback
}
}
4.controller中使用transaction
async xxxAction() {
const data = this.post();
// 一定要保证三个或N个在一次连接中进行
const salesRecord = this.ctx.model('sales_record');
const salesRecordItem = this.ctx.model('sales_record_item').db(salesRecord.db());
const members = this.ctx.model('members').db(salesRecord.db());

// 开始事务
await salesRecord.transaction(async() => {
// 捕捉异常
      try {
      await members.updateMember(data);
      await salesRecord.submitSalesRecord(data);
      // 提交最后的结果,如果最后成功了那就会执行commit,失败了会rollback
      return await salesRecordItem.addMany(data.items);
      } catch (e) { // 出错了就rollback
      await salesRecord.rollback();
      }
    });
}
查看最后的结果
  这是成功了走的commit

这是失败了走的rollback

  有啥问题评论区交流吧~

  
页: [1]
查看完整版本: thinkjs使用事务