Обработка нескольких зависимых запросов в Redux-Saga - Ошибка обработки - PullRequest
0 голосов
/ 27 марта 2020

Учитывая массив предложений, я хочу отправить много http запросов на сервер для создания каждого из них. Я использую Redx-сагу и пытаюсь сделать их последовательными и зависимыми друг от друга.

Фактически, если только один из них выходит из строя, я хочу прервать следующие:

Я пробовал таким образом

function* handleCreateOffers(action: ReturnType<typeof createOffers>) {
  console.log(action.payload)

  try {
    const responses = action.payload.offers.map(offer => {
      httpCreateOffer('/createOffer', offer)
        .then(result => result)
        .catch(err => {
          throw new Error('Socket Event Timeout')
        })
    })
  } catch (err) {
    if (err instanceof Error && err.stack) {
      yield put(createOffersError(err.stack))
    } else {
      yield put(createOffersError('An unknown error occured.'))
    }
  }
}

Однако, когда я выкидываю ошибку, это не похоже, доходит до оператора catch, вместо этого он продолжает прокручивать массив

Спасибо

1 Ответ

0 голосов
/ 29 марта 2020

Вы можете попробовать что-то вроде этого:

function* handleCreateOffers(action: ReturnType<typeof createOffers>) {
  const offers = action.payload.offers.

  for (let i = 0; i < offers.length; i += 1) {
    try {
      const result = yield call(httpCreateOffer, '/createOffer', offers[i]);
    } catch (err) {
      if (err instanceof Error && err.stack) {
        yield put(createOffersError(err.stack))
      } else {
        yield put(createOffersError('An unknown error occured.'))
      }
      break;
    }
  }
}

Ваша обработка ошибок будет немного другой. Важной частью является break l oop.

...