Я использую React-Redux и у меня есть действие initializeApp, которое необходимо запустить для всех страниц:
export const initializeApp = () => async dispatch => {
console.log("first initializeApp auth action");
const response = await axios.get("/api/current_user");
console.log("second initializeApp auth action");
dispatch({
type: SAVE_FETCHED_USER_AUTH,
auth: response.data.auth,
mongoDBUserId: response.data._id
});
...
}
У меня есть определенные действия, которые необходимо выполнить для каждой страницы, например:
export const fetchAsks = () => async dispatch => {
console.log("fetchAsks action");
const response = await axios.get("/api/landing_asks");
dispatch({
type: SAVE_FETCHED_ASKS,
landingAsks: response.data
});
};
В файле компонентов React у меня есть:
componentWillMount() {
// run once before first render()
this.props.initializeApp();
this.props.fetchLandingPageSortingHatAsks();
console.log("after both componentWillMount functions");
}
Мне нужно, чтобы initializeApp завершил работу перед fetchAsks, но в консоли он печатается в следующем порядке:
- "первое действие initializeApp auth"
- "действие fetchAsks"
- "после обеих функций componentWillMount"
- «Второе действие инициализации инициализации приложения»
Мне нужен заказ:
- "первое действие initializeApp auth"
- «Второе действие инициализации инициализации приложения»
- "fetchAsks action"
- "после обеих функций componentWillMount"
Я попытался сделать initializeApp асинхронным, добавив async
before (), но действия не могут быть асинхронными. Перемещение запросов fetch в componentDidMount также не решило проблему.
Любая помощь или направление приветствуется. :)