Chr*_*sco 3 javascript firebase google-cloud-firestore
我正在阅读有关事务操作的文档,我认为该方法的工作原理与“添加数据”页面中记录t.set()的类似。docReference.set()
令我惊讶的是,它没有:
const newCustomerRef = db.collection('customers').doc();
await db.runTransaction(t => {
const res = t.set(newCustomerRef, formData)
console.log(res)
});
Run Code Online (Sandbox Code Playgroud)
上面的对象res( 的返回值t.set())包含一堆看起来很混乱的 props,而且看起来并不适合您使用它们。
有什么方法可以获取事务中新创建文档的 ID 吗?
我想要实现的是一次性进行多个数据操作,并在失败时恢复所有内容。
根据 Doug 的回答,如果newCustomerRef已经包含 ID,那么我似乎缺少的是在 catch 块期间删除它,以防事务失败:
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...
}
Run Code Online (Sandbox Code Playgroud)
这是一种手动操作,感觉有点老套。有没有办法在交易失败时自动删除?
newCustomerRef已经包含 ID。doc()它是在交易开始之前在客户端被调用时随机生成的。
const id = newCustomerRef.id
Run Code Online (Sandbox Code Playgroud)
如果事务由于任何原因失败,数据库不会改变。
| 归档时间: |
|
| 查看次数: |
924 次 |
| 最近记录: |