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
在这里插入图片描述

有啥问题评论区交流吧~

吴迪软件开发 小程序 ECMAScript 6 React.js
金牛区吴迪软件开发工作室博客