【发布时间】:2021-12-12 09:27:09
【问题描述】:
我正在使用 Firebase v9,我正在构建一个聊天应用程序,我需要在调用 onSnapShot 获取聊天数据之前做一些异步工作:
const getChat = async () => {
// I need to await for user data before doing anything else.
// I'll need some user data to build the query which
// I'll be using in onSnapShot later on.
const user = await getUserData();
console.log(user);
const collectionRef = collection(db, "messages");
const q = query(
collectionRef, where("user_id", "==", user.id), orderBy("createdAt"));
const unsubscribe = onSnapshot(q, (snapshot) => {
const data = snapshot.docs.map((doc) => {
const entry = doc.data();
return {
id: doc.id,
message: entry.message,
};
});
setChatLines(data);
});
return unsubscribe;
};
然后在 useEffect 中:
useEffect(() => {
const unsubscribe = getChat();
return () => {
unsubscribe();
};
}, []);
这里的问题是unsubsribe 是一个promise,因为getChat 是异步的,但我仍然想在调用onSnapShot 之前等待getUserData(),因为稍后我将需要onSnapShot 查询中的用户数据.
有没有办法让这项工作同时能够在 useEffect 清理功能中正确unsubscribe?
【问题讨论】:
标签: reactjs firebase firebase-realtime-database react-hooks google-cloud-functions