如何返回文档数据Firebase数据库



我正在学习React/Firebase,我有一个函数可以查询特定用户的父节点。

export const fetchUserDocument = (userId) => {
const db = database.ref("users");
//if I write return here it outputs
//  const user = snapshot.val();
//  return user;
db.child(userId).on("value", (snapshot) => {
const user = snapshot.val();
return user;
});
//return db 
};

然后在另一个文件中,我可以调用这个函数来检索像const user = await fetchUserDocument(userId)这样的用户数据,但当我console.log(user)时,我得到了未定义的数据。

onSnapshot是asnynchronous,因此它不能立即向您返回值。您需要向fetchUserDocument传递一个回调函数,并在获得用户数据时调用它:

export const fetchUserDocument = (userId, cb) => {
const db = database.ref("users");
db.child(userId).on("value", (snapshot) => {
const user = snapshot.val();
cb(user);
});
};
fetchUserDocument(userId, (user) => {
console.log(user);
});

另一种方法是从fetchUserDocument返回承诺:

export const fetchUserDocument = async (userId) => {
return new Promise((resolve, reject) => {
const db = database.ref("users");
db.child(userId).on("value", (snapshot) => {
const user = snapshot.val();
resolve(user);
});
});
};

这会给你想要的结果:

const user = await fetchUserDocument(userId);
console.log(user);