dalv_happy
@dalv_happy

Как отменить асинхронное выполнение кода на JS?

Добрый день!
Я ожидаю что выполниться цикл с запросами, а после этого выполнится строка dispatch(fetchStatus(false));
А по факту цикл и dispatch(fetchStatus(false)); выполняются параллельно
Action:
export const getCheck = (invoices) => async (dispatch, getState) => {
  const { invoices } = getState().personalInformation;

  dispatch(fetchStatus(true));

  for (const invoice of invoices) {
    axios("url" ,invoice)
      .then((data) => {
        dispatch({ type: 'PI_SET_INVOICES_PARAMS', payload: data.Model });
      })
      .catch();
  }


  dispatch(fetchStatus(false));
};
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ответы на вопрос 2
@AlexKindGeek
Promise.all

Как делаю я в проектах:
export const deactivateItem = (domenKey, apiKey, ids, activate) => {
  const domenPath = domen[domenKey],
    apiPath = api[apiKey],
    apiList = ids.map((item) =>
      Api.put(`${domenPath}${apiPath}/${item.id}`, { enabled: !!activate })
    );
  return Promise.all(apiList).then((res) => res); // тут можно диспатчить екшены какие надо
};
Ответ написан
Комментировать
Просто добавь await перед axios.get или оберни invoices в Promise.all
await Promise.all(
    invoices.map(invoice =>
      axios('url', invoice).then(data => {
        dispatch({ type: 'PI_SET_INVOICES_PARAMS', payload: data.Model });
      }),
    ),
  );
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы