javascript - 如何迭代 firebase get 的结果

标签 javascript firebase google-cloud-firestore

我正在尝试使用 Firebase 文档中的所有用户。我怀疑我的问题是我对 javascript 理解的限制。

我尝试过使用和不使用异步/调度模式,但没有成功

const getUsers = () => {
    database.collection('users').onSnapshot(docs => {
      const users = [];
      docs.forEach(doc => {
        users.push({
          ...doc.data(),
          id: doc.id,
          ref: doc.ref,
        });
      });
      return users;
    });
  };

let users = getUsers();
  users &&
    users.map(user => {
      console.log('name: ', user.displayName);
    });

最终,我想循环访问每个用户

最佳答案

正如 @GazihanAlankus 所解释的,由于对 Firestore 数据库的查询是异步操作,因此您需要在函数中返回 Promise,方法是使用 get()方法如下:

  const getUsers = () => {
    return   //Note the return here
      database
      .collection('users')
      .get()
      .then(querySnapshot => {
        const users = [];
        querySnapshot.forEach(doc => {
          users.push({
            ...doc.data(),
            id: doc.id,
            ref: doc.ref
          });
        });
        return users;
      });
  };

然后你需要按如下方式调用它:

  getUsers().then(usersArray => {
    console.log(usersArray);
    usersArray.map(user => {
      console.log('name: ', user.displayName);
    });
  });

因为该函数返回一个 Promise,请参阅 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then

<小时/>

您可以进行以下测试,查看 console.log() 的执行顺序以及第二个 console.log() 在控制台中打印的内容:

  getUsers().then(usersArray => {
    console.log(usersArray);
    usersArray.map(user => {
      console.log('name: ', user.name);
    });
  });

  console.log(getUsers()); 

关于javascript - 如何迭代 firebase get 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55984583/

相关文章:

javascript - 如何使用 AntiForgeryToken 将 MVC View 模型传递到 AJAX 调用中

ios - 将 Firebase 凭据提交给 App Store 审核员进行审核以测试推送通知

android - 最新版本如何使用getdownloadurl?

flutter - 如何访问Firestore中的嵌套项目?

angular - 无法使用 angularfire2 访问 Angular 6 应用程序中的多个 Google Firestore DB

javascript - React document.addEventListener 正在检测多个按键

javascript - 当用户从 asp.net 中的 gridview 删除行时显示警告消息

javascript - style.display = "block"不适用于 ie 和 chrome

javascript - onSubmit 方法在使用 Firebase 的 React 中执行渲染

swift - 使用 Swift 同步访问 Firebase Cloud Firestore