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

Redux saga. unable to use yield in a promise 'catch' block

我是 redux-saga 的新手,我收到错误 yield is a reserved word in strict mode 仅在下面的 axios promise 中。我 没有 在第二个 try/catch

得到这个错误
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));
  }
}

显然我可以重构这一行并替换为

store.dispatch(actions.loginError(error));

但这是一个技巧。任何 insight/alternative 将不胜感激。

你可以在 saga 中产生一个 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));
  }
}