在全球范围内访问Firestore数据

时间:2019-05-24 22:33:56

标签: node.js google-cloud-firestore

我正在尝试访问Firestore数据并将其推送到数组。这是超级基础,但是由于某些原因,我无法弄清楚为什么它不起作用:

var db = admin.firestore();

let arr = [];

var Ref = db.collection('Test').doc('Document');
var getDoc = Ref.get()
    .then(doc => {
       if (!doc.exists) {
         console.log('No such document!');
       } else {
          let data = doc.data().Name;
          arr.push(data);
       }
    })
    .catch(err => {
         console.log('Error getting document', err);
    });

 console.log(arr)  // expecting >>> ['Joe'] (ie: data that is in firestore object)

为什么arr不包含Firestore对象?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

它不包含来自Firestore 的数据。

get()通过返回Promise然后继续执行程序来异步操作。下一行是console.log(arr),但尚未填充arr-在Promise完成时填充(称为then()部分)。

如果您使用的节点版本足够现代(此时应使用节点8及更高版本),则可以使用await等待异步操作完成,然后再继续操作。下一行。

我还没有测试过,但是重写后您的代码可能看起来像这样:

doc = await Ref.get();
if (!doc.exists) {
  console.log('No such document!');
} else {
   let data = doc.data().Name;
   arr.push(data);
}

console.log(arr)

这将起作用,因为await等待异步get()完成并返回文档。其余部分将被同步处理。