作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读 Transaction 上的文档操作,我认为 t.set()
方法的工作方式类似于 Add data 中记录的 docReference.set()
页面。
令我惊讶的是,它没有:
const newCustomerRef = db.collection('customers').doc();
await db.runTransaction(t => {
const res = t.set(newCustomerRef, formData)
console.log(res)
});
上面的res
对象(t.set()
的返回值)包含了一堆props,看起来很乱,看起来不像是有意的以便您与他们一起工作。
有什么方法可以在事务中获取新创建文档的 ID?
我想要实现的是一次进行多个数据操作,如果失败则将所有内容还原。
根据 Doug 的回答,如果 newCustomerRef
已经包含 ID,看来我缺少的是在 catch block 期间删除它以防事务失败:
try {
const newCustomerRef = db.collection('customers').doc();
await db.runTransaction(t => {
const res = t.set(newCustomerRef, formData)
console.log(res)
});
} catch (e) {
newCustomerRef.delete()
//...error handling...
}
这是一种手动操作,感觉有点老套。有没有办法在交易失败时自动删除?
最佳答案
newCustomerRef
已包含 ID。它是在事务开始之前调用 doc()
时在客户端随机生成的。
const id = newCustomerRef.id
如果事务因任何原因失败,数据库将保持不变。
关于javascript - 如何在 Firestore 中的交易期间获取新创建文档的 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63462590/
我是一名优秀的程序员,十分优秀!