收藏
回答

共享环境不支持数据库事务?

框架类型 问题类型 终端类型 AppID 环境ID 基础库版本
小程序 Bug 工具 wx746a1e28d7e57f43 kidbookservice-ib23y 2.9.3
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()

// 云函数入口函数
exports.main = async (event, context) => {
  var cloud_back = new cloud.Cloud({
    resourceAppid'xxx',
    resourceEnv'yyy',
  })
  await cloud_back.init({
    env: cloud_back.DYNAMIC_CURRENT_ENV
  })
  const db = cloud_back.database({
    throwOnNotFoundfalse
  })
  const _ = db.command
  try {
    const result = await db.runTransaction(async transaction => {
      const r1 = await transaction.collection('book').doc(event.books[0]._id).get()
      const r2 = await transaction.collection('book').doc(event.books[1]._id).get()
      if (r1.data && r2.data) {
        const u1 = await transaction.collection('book').doc(event.books[0]._id).update({
          data: {
            available_stock: _.inc(1)
          }
        })


        const u2 = await transaction.collection('book').doc(event.books[1]._id).update({
          data: {
            available_stock: _.inc(1)
          }
        })


        console.log(`transaction succeeded`)


        // 会作为 runTransaction resolve 的结果返回
        return {
          r1: r1.data.available_stock + 1,
          r2: r2.data.available_stock + 1,
        }
      } else {
        // 会作为 runTransaction reject 的结果出去
        await transaction.rollback(-100)
      }
    })


    return {
      successtrue,
      Account: result,
    }
  } catch (e) {
    console.error(`transaction error`, e)


    return {
      successfalse,
      error: e
    }
  }


}


B的环境共享给了A(所有权限)

在A的云函数中,访问B的数据库,使用runTransaction创建事务,抛出异常:

{

code: 'SIGN_PARAM_INVALID',

message: 'you are not authorized to perform operation (tcb:database.startTransaction)'

如果在A的云函数中,改成访问A的数据库,就没有问题。

回答关注问题邀请回答
收藏

2 个回答

  • 陈怀俊(业主我当家)
    陈怀俊(业主我当家)
    2021-03-22

    你的问题解决没有,我也有相同问题出现,方便加个微信不?13883166466

    我在一个企业名下,申请了两个微信appid,分别叫A小程序和和B小程序,对应A环境和B环境,

    前提是B环境已授权A环境可访问,

    现在需要在A小程序内,访问B环境的云数据库

    const db = wx.cloud.database({env:'B环境ID'})

    此处,我填写了B环境ID,报环境不存在,我填写A环境ID,又报没有数据库,此处该如何配置?

    


    2021-03-22
    有用
    回复 1
  • 疯狂的小辣椒
    疯狂的小辣椒
    2020-12-10

    你好,反馈已收到,我们看看。

    2020-12-10
    有用
    回复 4
    • Syd
      Syd
      2021-03-09
      还请给一个明确答复,谢谢
      2021-03-09
      回复
    • 疯狂的小辣椒
      疯狂的小辣椒
      2021-03-09回复Syd
      这个已经解决了的,可以再试试看
      2021-03-09
      回复
    • Syd
      Syd
      2021-03-15回复疯狂的小辣椒
      试了一下,仍然报同样的错误
      2021-03-15
      回复
    • 周公子
      周公子
      2021-04-26回复Syd
      你好,代码里 cloud_back 构造时已经指定了环境,init 时不需要在额外指定。
      2021-04-26
      回复
登录 后发表内容
问题标签