【问题标题】:Getting data from Cloud Firestore从 Cloud Firestore 获取数据
【发布时间】:2021-07-15 16:47:55
【问题描述】:

我正在努力从 Firestore 云中获取数据。问题是我有一个函数,里面有来自数据库的数据,但我无法将它从函数中取出。下面我附上代码。

function logBook(doc){
    let names = doc.data().name;
    console.log(names);
}



db.collection('flights').get().then((snapshot) =>{ 
    snapshot.docs.forEach(doc => {
        logBook(doc);
    });
})

console.log(names);

控制台输出:https://prnt.sc/1bgrice

谢谢!

【问题讨论】:

    标签: javascript database firebase google-cloud-firestore


    【解决方案1】:

    您可能错过了这样一个事实,即如果您在函数中使用then,它将离开函数的同步流程,并且您无法按预期返回结果。

    试试这样的代码:

    function logBook(doc) {
      let names = doc.data().name;
      console.log(names);
    }
    
    async function getData() {
      const result = [];
    
      const snapshot = await db.collection("flights").get();
    
      snapshot.docs.forEach((doc) => {
        logBook(doc);
        result.push(doc);
      });
    
      return result;
    }
    
    

    了解 Firestore SDK 的 async 特性非常重要。

    【讨论】:

      【解决方案2】:

      答案比您想象的要简单得多。您只需在函数外部声明一个变量,而不是在函数内部为其赋值。像这样的:

      var globalVar;
      
      function logBook(doc){
          let names = doc.data().name;
          globalVar = names;
          console.log(names);
      }
      
      
      
      db.collection('flights').get().then((snapshot) =>{ 
          snapshot.docs.forEach(doc => {
              logBook(doc);
          });
      })
      
      console.log(names);
      

      此外,如果您使用 let 关键字分配变量,它将在函数内部进行作用域。我可以向您推荐这个主题:What's the difference between using "let" and "var"?

      (如果您不想在入门问题中添加垃圾邮件,可以通过 dc 与我联系:vargaking#4200)

      【讨论】:

        猜你喜欢
        • 2019-09-30
        • 2020-03-17
        • 2020-03-19
        • 2022-06-24
        • 1970-01-01
        • 2019-10-29
        • 1970-01-01
        • 2018-10-26
        相关资源
        最近更新 更多