云函数中使用事务,在提交的数据中增加_openid字段,但事务提交后_openid字段没有生成。同样的代码,不用事务就可以正常增加_openid字段。有开发者遇到类似问题吗?还有在事务中使用db.serverDate()会报错。
如下是云函数代码:
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
try {
const transaction = await db.startTransaction()
// generate order record
let trade_no = 'ABCD1234'
let order = {
_id: trade_no,
_openid: wxContext.OPENID,
status: 0,
create_date: new Date(),
// create_date: db.serverDate(), // 报错:invalid key offset
}
await transaction.collection('test').add({ data: order })
await transaction.commit()
console.log(`transaction1 succeeded`)
return {
success: true,
}
} catch (e) {
console.error(`transaction error`, e)
return {
success: false,
}
}
}
每条记录都有_id 字段用做记录唯一标志,_openid 字段用以标志记录的创建者,即小程序的用户,_openid是在文档创建时由系统根据小程序用户默认创建的,开发者可使用其来标识和定位文档,开发者可以自定义_id,但不可自定义和修改_openid 。
在云函数中,如果不用事务,是可以正常用代码添加_openid字段的;但如果用了事务,记录能正常创建,但没有代码添加的_openid字段。
事务正常执行完成了,但数据不完整(没有_openid字段),怎么解?这算不算是事务处理的严重bug?