首页 > 解决方案 > 使用实时侦听器继续从函数中获取值

问题描述

我在设置它时遇到了一些麻烦。我有一个处理所有 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,
      })
    }

  }
}

标签: javascriptgoogle-cloud-firestore

解决方案


推荐阅读