Обычно, что я буду делать внутри компонента React, это использовать функцию connect
для подписки на хранилище с избыточностью, в этом случае у меня есть доступ к хранилищу с избыточностью и я знаю, когда он обновляется.
Я хочу дождаться обновления хранилища снаружи компонента и файла .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)
// 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));
}
};
};
Итак, я хочу иметь возможность ждатьотправка действия fetchGameResultArraySuccess и обновление gameResultArray перед выполнением socket.emit ()