javascript - 我对这个异步函数做错了什么?

标签 javascript firebase

我正在尝试学习/实现异步函数,但我不确定为什么我无法让它工作。我的异步函数中的“用户”返回未定义。但是,进行数据库调用的函数工作得很好。

 const getUsers = () => {
    const database = firebase.database()
    const users = database.ref('users');
    users.on('value', function(snapshot) {
        const users = []
        snapshot.forEach(function(childSnapshot) {
          let user = childSnapshot.val();
          users.push(user)
        });
        return users
    });
  }

  async function generateRandomPotentialPartner() {
    try {
      const users = await getUsers();
      console.log(users)
    } catch (error) {
      console.log(error)
    }
  }

最佳答案

使用 on() 的 Promise 版本,而不是使用回调版本,并从 getUsers() 函数返回该 Promise。

使用您当前使用的回调方法,根本不会返回任何内容,因为回调中的返回不会返回到外部函数

const getUsers = () => {
  const database = firebase.database()
  const users = database.ref('users');
  // return the on() promise instead of using callback
  return users.on('value').then(snapshot => {
    const users = []
    snapshot.forEach(childSnapshot => {          
      users.push(childSnapshot.val())
    });
    return users
  });
}

关于javascript - 我对这个异步函数做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57938174/

相关文章:

javascript - 如何在不修改模板的情况下在Google Blogger中添加jQuery?

javascript - 函数是对象吗?为什么 console.log 不显示可检查对象?

android - Firebase 存储的上传/下载速度非常慢

Swift 3.1 - .set Values For Keys 和 Firebase 无法检索用户

ios - 使用来自 GoogleService-Info.plist 的信息访问 Firebase 前端

ios - 函数 didReceive RemoteMessage 未被调用 Swift 5

javascript - 比较从数据库检索的两个日期

javascript - ReactFire 未从实时数据库加载数据

firebase - 有没有办法从新帐户使用 Firebase Legacy 控制台

javascript - 为什么 Jquery.globalEval 不工作?