SDK數(shù)據(jù)庫(kù) database·開始事務(wù)

2022-05-12 16:42 更新

Database.startTransaction():Promise<Transaction>

支持端:云函數(shù)

開始事務(wù),另一個(gè)同樣可以使用的發(fā)起事務(wù)的 API 是 runTransaction。僅可在云函數(shù)中使用。

返回值

Promise.<Transaction>

resolve 的結(jié)果為事務(wù)操作對(duì)象,其上可通過 collection API 操作數(shù)據(jù)庫(kù),通過 commit 或 rollback 來(lái)結(jié)束或終止事務(wù)。

限制

事務(wù)現(xiàn)僅支持在云函數(shù) wx-server-sdk 使用。事務(wù)操作時(shí)為保障效率和并發(fā)性,只允許進(jìn)行單記錄操作,不允許進(jìn)行批量操作,但可以在一個(gè)事務(wù)中對(duì)多個(gè)記錄進(jìn)行操作。

示例代碼

兩個(gè)賬戶之間進(jìn)行轉(zhuǎn)賬的簡(jiǎn)易示例

const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database({
  throwOnNotFound: false,
})
const _ = db.command

exports.main = async (event) => {
  try {
    const transaction = await db.startTransaction()

    const aaaRes = await transaction.collection('account').doc('aaa').get()
    const bbbRes = await transaction.collection('account').doc('bbb').get()

    if (aaaRes.data && bbbRes.data) {
      const updateAAARes = await transaction.collection('account').doc('aaa').update({
        data: {
          amount: _.inc(-10)
        }
      })

      const updateBBBRes = await transaction.collection('account').doc('bbb').update({
        data: {
          amount: _.inc(10)
        }
      })

      await transaction.commit()

      console.log(`transaction succeeded`)

      return {
        success: true,
        aaaAccount: aaaRes.data.amount - 10,
      }
    } else {
      await transaction.rollback()

      return {
        success: false,
        error: `rollback`,
        rollbackCode: -100,
      }
    }
  } catch (e) {
    console.error(`transaction error`, e)

    return {
      success: false,
      error: e
    }
  }
}


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)