Javascript 如何返回Firebase数据库中的文档数据?
我正在学习React/Firebase,我有一个查询特定用户的父节点的函数Javascript 如何返回Firebase数据库中的文档数据?,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我正在学习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(&q
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);
谢谢你的这两种方法。我想我会倾向于将我的大部分fetch实现为promise方法!只是一个后续问题。如果用户为空,我是否拒绝(用户)?这是返回有效/无效响应的好方法吗?当您有错误时,通常使用reject。例如,如果firebase返回一个错误,则捕获它并以reject结束承诺。