Действия должны быть простыми объектами.Используйте пользовательское промежуточное ПО для асинхронных действий.реагируют-перевождь - PullRequest
0 голосов
/ 22 сентября 2019

Я новичок в реагировании с избыточностью, я пытаюсь получить коллекцию из Firestore, но теперь, когда firebase возвращает данные, и я пытаюсь отобразить информацию в хранилище с помощью наблюдаемой избыточности, я получаю сообщение об ошибке "Действия должны быть простыми объектами.Используйте пользовательское промежуточное ПО для асинхронных действий. "Я думаю, это должно быть о эпической конфигурации, тогда я оставляю код

Epic

import { getFirestore } from "redux-firestore";
import {
  GET_DOCUMENTS,
  GET_COLLECTIONS_BY_DOCUMENT,
  setStatus,
  getDocumentsSuccess,
  getDocumentsFailed
} from "../actions/dataActions";
import { switchMap } from "rxjs/operators";
import { ofType } from "redux-observable";
import { concat, of } from "rxjs";

export default function dataEpics(action$) {
  const getFS = getFirestore();
  return action$.pipe(
    ofType(GET_DOCUMENTS, GET_COLLECTIONS_BY_DOCUMENT),
    switchMap(action => {
      if (action.type === GET_DOCUMENTS) {
        return concat(
          of(setStatus("pending")),
          getFS
            .collection("en")
            .get()
            .then(querySnapshot => {
              let listDocumentIds = [];
              querySnapshot.forEach(doc => {
                listDocumentIds.push(doc.id);
                getDocumentsSuccess(listDocumentIds);
              });
            })
            .catch(err => of(getDocumentsFailed(err)))
        );
      }
    })
  );
}
Action

export const SET_STATUS = "SET_STATUS";
export const GET_DOCUMENTS = "GET_DOCUMENTS";
export const GET_DOCUMENTS_SUCCESS = "GET_COLLECTIONS_SUCCESS";
export const GET_DOCUMENTS_FAILED = "GET_COLLECTIONS_FAILED";

export function setStatus(status) {
  return {
    type: SET_STATUS,
    payload: status
  };
}

export function getDocumentsSuccess(documents) {
  return {
    type: GET_DOCUMENTS_SUCCESS,
    payload: documents
  };
}
reducer

import {
  GET_DOCUMENTS_SUCCESS,
  GET_DOCUMENTS_FAILED,
  SET_STATUS
} from "../actions/dataActions";

const initState = {
  status: "idle", // "idle" | "logout" | "pending" | "login" | "success" | "failure";
  documents: [],
  collections: []
};

const dataReducers = (state = initState, action) => {
  switch (action.type) {
case SET_STATUS: {
      return {
        ...state,
        status: action.payload
      };
    }
    case GET_DOCUMENTS_SUCCESS: {
      return {
        ...state,
        status: "success",
        documents: action.payload
      };
    }
  default:
      return state;
  }
};

export default dataReducers;

Я думаю, что ошибка в эпопее, у меня больше кода аналогичным образом

Спасибо за помощь.

1 Ответ

1 голос
/ 24 сентября 2019

Я нашел решение, ошибка была в эпопее, я пытался вызвать действие внутри querySnapshot, это невозможно, затем я перемещаю getDocumentsSuccess после

getFS
.collection(action.payload.language + "_" + "MachinesAndEquipment")
.get()
.then(querySnapshot => {
let listDocumentIds = [];
querySnapshot.forEach(doc => {
     listDocumentIds.push(doc.id);
});  
 getDocumentsSuccess(listDocumentIds);


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...