如何在Firestore中的事务期间获取新创建文档的ID?

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)

这是一种手动操作,感觉有点老套。有没有办法在交易失败时自动删除?

Dou*_*son 7

newCustomerRef已经包含 ID。doc()它是在交易开始之前在客户端被调用时随机生成的。

const id = newCustomerRef.id
Run Code Online (Sandbox Code Playgroud)

如果事务由于任何原因失败,数据库不会改变。