redux saga等待完成?

时间:2018-12-12 15:14:36

标签: redux redux-saga

我想依次调用2个api调用。

两个api分别可以正常工作。

我做一个佐贺(?)

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

但是我认为它们可以同时运行(不保证执行顺序)

我在google上找到了建议这样做的github问题

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

然后,我必须对response1和response2进行success个操作。
我想知道是否没有办法使用put重用已经创建的saga(?)?

  • 编辑

在以下示例中,我不知道checkout的正确名称。我在问题中称它们为saga(?)。 我想利用已经存在的checkoutrootSaga处理CHECKOUT_REQUEST动作的..

假设我在function* checkout1() function* checkout2, function* checkout3中有checkout1,我想使用checkout2checkout3

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 :(得分:0)

我假设您想从另一个生成器函数中产生一些生成器函数。

然后在您的函数* 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())
  }
}

或您需要的任何其他组合。