Redux Toolkit:我可以将createAsycThunk与Firebase侦听器功能配合使用例如firestore.collection.onSnapshot

问题描述

是否可以将createAsyncThunk用于Firebase侦听器,例如firestore.collection.onSnapshot

它可能不起作用,因为onSnapshot的工作方式(这是一个侦听器,它接收数据并在每次Firestore更新时触发回调,并且它返回取消订阅该侦听器的函数)。我尝试实现createAsyncThunk,但无法解决。

这是我当前有效的thunk实现:

const listenerUnsubscribeList = [];
export function fetchProjects() {
  return dispatch => {
    dispatch(fetchProjectsPending());
    const unsubscribe = firestore
      .collection('projects')
      .onSnapshot(
        snapshot => { dispatch(fetchProjectsFulfilled(snapshot.docs.map(doc => ({ id: doc.id,...doc.data() })))) },error => { dispatch(fetchProjectsError(error)) },);
    listenerUnsubscribeList.push(unsubscribe);
  }
}

这是我尝试的createAsyncThunk,不起作用。我收到database/fetchProjects/pendingdatabase/fetchProjects/fulfilled,但有效载荷为undefined

const listenerUnsubscribeList = [];
export const fetchProjects = createAsyncThunk(
  'database/fetchProjects',async (_,thunkAPI) => {
    const unsubscribe = await firestore
      .collection('projects')
      .onSnapshot(
        snapshot => { return snapshot.docs.map(doc => ({ id: doc.id,...doc.data() })) },error => { return error },);
    listenerUnsubscribeList.push(unsubscribe);
  }
);

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)