Angular:从 Firebase 实时数据库中的 onValue() 返回一个值

Uri*_*oss 3 javascript async-await firebase-realtime-database angular

我想返回“用户”对象。

收到错误消息:

变量“user”在分配之前使用。ts(2454)

我尝试使用 async / wait 但我无法在代码末尾将 wait 分配给“返回用户”,或者user= await snapshot.val()因为它位于onValue()范围内。

getLoggedInUser(id: string): User {
  const db = getDatabase();
  var user: User;
  onValue(ref(db, '/users/' + id), (snapshot) => {
    user = snapshot.val();
    // ...
  }, {
    onlyOnce: true
  });
  return user;
}
Run Code Online (Sandbox Code Playgroud)

Fra*_*len 6

当您调用时,onValue您将从数据库中的该路径获取当前值,然后还获取该值的所有更新。由于您的回调可能会被多次调用,因此无法返回单个值。

如果您只想获取一次值并返回它,您将需要使用get而不是onValue. 然后你也可以使用async/ await

async getLoggedInUser(id: string): Promise<User> {
  const db = getDatabase();
  var user: User;
  const snapshot = await get(ref(db, '/users/' + id))
  user = snapshot.val();
  return user;
}
Run Code Online (Sandbox Code Playgroud)