Как ждать, пока один вызов dispatch () не обновит состояние, а затем выполнить следующую отправку с последним состоянием? - PullRequest
0 голосов
/ 04 июня 2019

У меня есть создатель действий, который отправляет 3 действия.Но я хочу подождать, пока третья отправка обновит состояние, и я хочу использовать последнее состояние в следующей отправке.Я думал, что отправка асинхронная.Но когда я выполняю getState () после третьей отправки, это возвращает мне старое состояние.Что я делаю неправильно?Я использую Redux Thunk.

Я пытался обернуть каждую отправку в Promise и объединить в цепочку.Это не принесло пользы.

import * as actionTypes from '../actionTypes/index';
import * as actionCreators from '../actionCreators/index';


const authSuccess = (user) => {
    return {
        type: actionTypes.ON_AUTH_SUCCESS,
        user: user
    }
}

export const auth = (user) => {
    return (dispatch, getState) => {

        dispatch(authSuccess(user));
        dispatch(actionCreators.setAdditionalUserMeta(user.uid));
        dispatch(actionCreators.fetchExpenses(user.uid));


        let latestState = getState();
        console.log(latestState); //here i receive the old state
        dispatch(actionCreators.calculateAmountSpent(latestState.fetch.expenses));
    }
}

В третьей передаче я использую axios, чтобы извлечь некоторые расходы из базы данных firebase и обновить состояние с этим объектом расходов.И я хочу использовать этот объект расходов для вызова следующей отправки, которая должна рассчитать все расходы.Я обернул console.log внутри setTimeout для 2s, и он работал нормально.Что я здесь не так делаю?

...