Редакса сага ждать, пока не закончится? - PullRequest
0 голосов
/ 12 декабря 2018

Я хочу вызывать 2 вызова API последовательно.

Два apis работают нормально по отдельности.

Я делаю сагу (?), Которая делает

yield put(createAction1(arg1))
yield put(createAction2(arg2))

, но я думаю, что они запускаются одновременно (порядок выполнения не гарантируется)

Я погуглил и обнаружил проблемы с github, которыепредлагаю сделать

response1 = yield call(apiCallFunc, createAction1(arg1))
response2 = yield call(apiCallFunc, createAction2(arg2))

Тогда мне придется success действия для response1 и response2.
Интересно, нет ли способа повторно использовать уже созданную сагу (?), используя put?

  • edit

Я не знаю правильного имени для checkout в следующем примере.Я назвал их сагой (?) В своем вопросе .. Я хотел бы использовать уже существующие checkout или rootSaga, которые обрабатывают CHECKOUT_REQUEST действие ..

Скажем, у меня есть function* checkout1() function* checkout2, function* checkout3 внутри checkout1 Я хотел бы использовать checkout2 и checkout3

function* checkout() {
  // query the state using the exported selector
  const cart = yield select(getCart)

  // ... call some API endpoint then dispatch a success/error action
}

export default function* rootSaga() {
  while (true) {
    yield take('CHECKOUT_REQUEST')
    yield fork(checkout)
  }
}

1 Ответ

0 голосов
/ 13 декабря 2018

Я предполагаю, что вы хотите получить некоторую функцию генератора из другой функции генератора.

Тогда в вашей функции * checkout1 вы можете получить два других генератора

function* checkout1 {
  try {
    yield call(checkout2)
    yield call(checkout3)
    yield put(successAction())
  } catch (error) {
    yield put(errorAction())
  }
}

или можетесделайте два блока try-catch

function* checkout1 {
  try {
    yield call(checkout2)
    yield put(successAction1())
  } catch (error) {
    yield put(errorAction1())
  }

  try {
    yield call(checkout3)
    yield put(successAction2())
  } catch (error) {
    yield put(errorAction2())
  }
}

или любую другую комбинацию, которая вам нужна.

...