如何在Node.js中将Cloud Firestore字段值赋值给新变量?
解决Firestore文档字段赋值给lat和long变量的问题
嘿,我来帮你把Firestore文档里的字段值传递给你定义的lat和long变量!
首先看你现在的代码,已经成功获取到了文档数据,但只是打印出来了,还没把值赋给lat和long。而且要注意,Firestore的get()方法是异步操作,所以赋值必须放在then的回调函数里面,不然会因为异步执行顺序的问题,导致你在回调外访问lat和long时拿到的还是undefined。
修改后的代码(基于你原有的Promise写法)
var lat; var long; var cityRef = db.collection('UsersCurrentBookings').doc('3Xg6ujHMINeElzdOD3JypcZBMHw2'); var getDoc = cityRef.get() .then(doc => { if (!doc.exists) { console.log('No such document!'); } else { console.log('Document data:', doc.data()); // 这里替换成你Firestore文档里实际的纬度、经度字段名 // 比如文档里字段叫latitude和longitude,就这么写: lat = doc.data().latitude; long = doc.data().longitude; // 如果字段名就是lat和long,直接用doc.data().lat和doc.data().long即可 console.log('赋值完成:lat =', lat, ',long =', long); // 所有依赖lat和long的操作都要放在这里面,比如调用地图API之类的 } }) .catch(err => { console.log('Error getting document', err); });
更易读的async/await写法
如果你觉得Promise的链式写法有点绕,可以用async/await来处理异步,代码会更像同步逻辑:
async function fetchLocationData() { var lat; var long; var cityRef = db.collection('UsersCurrentBookings').doc('3Xg6ujHMINeElzdOD3JypcZBMHw2'); try { const doc = await cityRef.get(); if (!doc.exists) { console.log('No such document!'); } else { console.log('Document data:', doc.data()); lat = doc.data().latitude; long = doc.data().longitude; console.log('赋值完成:lat =', lat, ',long =', long); // 在这里执行所有需要用到lat和long的代码 } } catch (err) { console.log('Error getting document', err); } } // 记得调用这个异步函数 fetchLocationData();
关键注意点
- 字段名要匹配:一定要确认你Firestore文档里存储纬度和经度的字段名和代码里写的一致,比如文档里是
lat就用doc.data().lat,是lng就用doc.data().lng,不然会得到undefined。 - 异步执行顺序:所有需要使用lat和long的代码都必须放在
then回调或者async函数的await之后,否则会因为异步还没完成,变量还没被赋值就使用,导致结果不符合预期。
内容的提问来源于stack exchange,提问作者PvDev
相关产品推荐
相关产品推荐

