Javascript 等待redux存储区的特定属性从React组件外部更新

Javascript 等待redux存储区的特定属性从React组件外部更新,javascript,reactjs,redux,redux-saga,redux-thunk,Javascript,Reactjs,Redux,Redux Saga,Redux Thunk,通常情况下,我在React组件中要做的是使用connect功能订阅redux存储,在这种情况下,我可以访问redux存储,并在它更新时感知它 我想等待存储从组件外部更新到.js文件 以下是我迄今为止所做的工作: //socket-client.js file import { store } from "../../Redux/store"; //socket.on() function socket.on( "setQuestionsArrayOnTheAccepter", asyn

通常情况下,我在React组件中要做的是使用
connect
功能订阅redux存储,在这种情况下,我可以访问redux存储,并在它更新时感知它

我想等待存储从组件外部更新到.js文件

以下是我迄今为止所做的工作:

//socket-client.js file

import { store } from "../../Redux/store";
//socket.on() function
socket.on(
  "setQuestionsArrayOnTheAccepter",
  async ({ questionsArray, roomNameOnTheStore }) => {

    await store.dispatch(setQuestionsArray(questionsArray)); // this await on the setQuestionArray has no effect
    store.dispatch(setGameProgress());

    const { game } = store.getState();
    const { gameQuestionArray, gameResultArray } = game;

    // gameResultArray = [] will be empty here, and I want the saga to finish before the socket.emit

    socket.emit("sendSetQuestionsArrayOnTheSender", {
      gameQuestionArray,
      gameResultArray,
      roomNameOnTheStore
    });
  }
);

问题是gameResultArray默认为空([]),并且从setQuestionsArray操作中,我正在使用Axios(fetchGameResultStart saga)发送一个同步的redux saga


因此,我希望能够在运行socket.emit()

之前等待FetchGameResultArray成功操作被分派,并且gameResultArray被更新。您是否尝试过像redux saga这样的中间件?我使用的是saga middlewars,可能上面的代码不清楚。但我使用的是另一个模块中的传奇,单人传奇。由于我需要执行几乎完全相同的操作,所以我不想重新编写代码。这里的主要问题是代码运行在不同的磁带上,所以我依赖socket.io来通知我其他播放机已经完成了执行,但是这个操作不是同步的
// set QuestionsArray action
export const setQuestionsArray = (
  questionsArray,
  shouldShuffle = true,
  multiplayer = false,
  gameResultArray = null
) => {
  if (shouldShuffle) questionsArray = getRandom(questionsArray, 10);

  // using thunk middelware
  return dispatch => {
    dispatch({ type: GAME_TYPES.SET_QUESTIONS_ARRAY, payload: questionsArray });

    if (!multiplayer) {
      dispatch(fetchGameResultArrayStart(questionsArray, shouldShuffle));
    } else if (gameResultArray) {
      dispatch(fetchGameResultArraySuccess(gameResultArray));
    }
  };
};