Последовательность выполнения запросов в SPA React Redux?

Я делаю SPA.
При некоторых событиях на клиенте, допустим отметили интересный товар, есть необходимость отправлять определенные данные этого товара на сервер и в зависимости от этого подгружать в правую часть SPA контент. Некий интерактив.

На клике по кнопке "Интересно" я вызываю функцию в которой делаю POST запрос на сервер и тут же делаю запрос в action, их 3. Желая получить контент соответствующему товару.

Проблема в том, что данные приходят не у всех. Т.е. при нажатии на кнопку "Интересно" подгружается данные который вызывает одни action, потом несколько раз пробуешь тоже самое и вот только тогда погружаются данные из остальных action.
  • Вопрос задан
  • 1157 просмотров
Пригласить эксперта
Ответы на вопрос 2
@xom9lk
Немного не понял в чем проблема. Было бы понятнее с кодом обработчика клика на кнопку и кодом action.
Предположу что ты вызываешь action друг за другом, оберни каждый вызов в SetTimeout(()=>{action()}, 0);

Должно быть что-то типа (без привязки к Redux):
onClick(data) {
    rest.post("url to backend", {data})
    .then((response) = > {
        setTimeout(() = > {
            AppDispatcher.dispatch({
                actionType: AppConstants.INTERESTED_1,
                data: response.data
            });
        }, 0);

        setTimeout(() = > {
            AppDispatcher.dispatch({
                actionType: AppConstants.INTERESTED_2,
                data: response.data
            });
        }, 0);

        setTimeout(() = > {
            AppDispatcher.dispatch({
                actionType: AppConstants.INTERESTED_3,
                data: response.data
            });
        }, 0);
    })
    .catch(() => {
        AppDispatcher.dispatch({
            actionType: AppConstants.SERVER_ERROR
        });
    });
}
Ответ написан
Комментировать
ColCh
@ColCh
Веб разработчик
Наверное, нужно использовать Relay или его аналог для таких вещей.

Ещё способ - можно обернуть 2 запроса в один Action Creator; там уже выполнять очередь запросов и после них отправить один action.

Ещё - возвращать из Action Creator объект Promise.

P.S. не рекомендую вообще когда-либо оборачивать распространение action в нулёвый таймаут. Может привести к непредсказуемым последствиям
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы