Redux传奇。无法在promise'catch'块中使用yield

时间:2018-10-03 14:56:56

标签: reactjs redux redux-saga saga

我对redux-saga还是陌生的,并且遇到错误 yield是严格模式下的保留字,仅在下面的axios promise中。我在第二次尝试/捕获中收到此错误

SomeClass

很明显,我可以重构该行并替换为

function* usernameLoginWorker({ username, password, rememberMe }) {
  try {
    axios
      .post('login', { username, password, rememberMe })
      .then(handleUsernameLogin)
      .catch(error => {
        yield put(actions.loginError(GENERAL_ERRORS.LOGIN)); < ERROR HERE
      });
  } catch (err) {
    yield put(actions.loginError(GENERAL_ERRORS.LOGIN));
  }
}

但这是一个hack。任何见识/替代方案将不胜感激。

1 个答案:

答案 0 :(得分:2)

您可以在传奇中产生一个Promise,它将等待它完成,或者如果失败,它将进入catch块。您可以这样重写代码:

function* usernameLoginWorker({ username, password, rememberMe }) {
  try {
    const result = yield axios.post('login', { username, password, rememberMe });
    yield call(handleUsernameLogin, result);
  } catch (err) {
    yield put(actions.loginError(GENERAL_ERRORS.LOGIN));
  }
}