Firebase Firestore离线添加数据后如何获取文档ID?
解决Firestore添加文档后获取ID的问题
其实你已经离答案很近了,咱们一步步理清楚:
1. 你现有代码的正确用法
你当前的代码里,then回调中的docRef.id就是你要找的新文档ID。虽然Promise要等到服务器同步完成才会resolve,但这个ID早在客户端发起请求时就已经生成了——Firestore的文档ID是客户端本地生成的UUID,不是服务器分配的,所以哪怕网络有延迟,这个ID也不会改变,和本地缓存里的文档ID完全一致。
也就是说,只要你进入then回调,就可以直接用docRef.id来操作这个新文档,比如关联其他数据、更新本地状态等等。
2. 提前获取ID(无需等待服务器同步)
如果你的场景需要立刻拿到ID,不想等服务器确认写入,那可以换一种写法:先创建一个空的文档引用(自动生成ID),再写入数据。add()方法本质上就是doc().set()的语法糖,所以这种方式和add()效果完全一样,但能提前拿到ID:
// 先创建文档引用,此时已经生成了唯一ID const newFooDoc = db.collection('foo').doc(); // 立刻获取ID,直接使用 const newFooId = newFooDoc.id; // 再写入数据到这个文档 newFooDoc.set({ foo: 'bar' }) .then(() => { console.log('文档写入成功,ID是: ', newFooId); // 这里可以直接用newFooId或者newFooDoc操作文档 }) .catch(console.error);
这种方式下,你在调用set()之前就已经拿到了有效ID,完全不需要等Promise resolve,因为ID是本地生成的,后续的同步只是把数据推送到服务器和更新本地缓存而已。
总结
- 若可以等待服务器确认写入,用你原来的代码,
then中的docRef.id就是正确的ID; - 若需要立刻获取ID,先创建文档引用再写入,提前拿到ID即可。
内容的提问来源于stack exchange,提问作者themenace
相关产品推荐
相关产品推荐

