Redux Saga.невозможно использовать yield в блоке обещания 'catch' - PullRequest
0 голосов
/ 03 октября 2018

Я довольно новичок в redux-saga и получаю сообщение об ошибке yield - зарезервированное слово в строгом режиме только внутри обещаний Axios ниже.Я не получаю эту ошибку при второй попытке / улове

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));

, но это хак,Любое понимание / альтернатива будет принята с благодарностью.

1 Ответ

0 голосов
/ 03 октября 2018

Вы можете выдать Обещание в саге, и оно будет ждать его завершения или перейдет в блок 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));
  }
}
...