[英]How can I return document data Firebase database?
I'm learning React/Firebase and I have a function that queries parent node for a specific user.我正在学习 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
};
Then in another file I can call on this function to retrieve user data like this const user = await fetchUserDocument(userId)
but I am getting undefined when I console.log(user)
.然后在另一个文件中,我可以调用这个函数来检索用户数据,像这样
const user = await fetchUserDocument(userId)
但是当我console.log(user)
时我得到了 undefined 。
onSnapshot is asnynchronous, so it cannot return value to you immediately. onSnapshot 是异步的,因此它不能立即向您返回值。 You need to pass a callback function to fetchUserDocument and call it when you got the user data:
您需要将回调函数传递给 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);
});
Another approach would be returning a promise from fetchUserDocument:另一种方法是从 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);
});
});
};
This would give you the result you want:这会给你你想要的结果:
const user = await fetchUserDocument(userId);
console.log(user);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.