javascript - 使用实时侦听器继续从函数中获取值
问题描述
我在设置它时遇到了一些麻烦。我有一个处理所有 Db API 的文件夹,因此关注点是分开的。
我有一个函数可以打开连接并在 Db 中的值发生变化时获取实时更新(Firebase Firestore)。
我将这个“监听器”函数称为一次,并希望在调用“监听器”函数的函数中继续接收实时值。
有什么想法我能做到这一点吗?
这是我的代码:
// LISTENER FN
export const getConnectionRequestsFromDb = () => {
const uid = getUID()
const q = query(
collection(database, "inbox"),
where("uids", "array-contains-any", [uid]),
where("type", "==", "connectionRequest"),
limit(50)
)
const data = []
const unsubscribe = onSnapshot(q, (querySnapshot) => {
// Initially return an empty array, milliseconds later the actual values
querySnapshot.forEach((doc) => data.push(doc.data()))
})
const formattedData = convertDatesIntoJsTimestamps(data)
return [formattedData, null, unsubscribe]
}
// INVOKING FN
export const getConnectionRequests = () => {
return async (dispatch) => {
dispatch({ type: "CONNECTIONS_ACTIONS/GET_CONNECTIONS_REQUEST/pending" })
// I want to keep listening for realtime updates here and dispatch payloads accordingly
const [data, error, unsubscribe] = getConnectionRequestsFromDb()
if (data) {
return dispatch({
type: "CONNECTIONS_ACTIONS/GET_CONNECTIONS_REQUEST/fulfilled",
payload: data,
})
}
}
}
解决方案
推荐阅读
- javascript - 在值中搜索
- android - Flutter 连接错误回调
- unicode - UTF-16 编码如何使用代理代码点?
- sql - SQL - 连接乘法数据
- opencl - pyinstaller 与 opencl 的使用
- electron - 当 package.json 包含安装后脚本时,为什么 Node 串行端口会失败?
- javascript - 我怎样才能延迟动作,机器人会忽略第二个命令,直到我执行第一个命令?
- c - 嗨,我正在为此硬件编码,使用信号(sigaction,sigprocmask)
- python - 使用 ffmpeg 将 youtube 音频转换为 .mp3:错误:音频转换失败:编码器:Lavc58.91.100 libmp3lame
- arrays - 需要帮助在 perl 中填充结构数组