【问题标题】:Redux saga. unable to use yield in a promise 'catch' blockRedux 传奇。无法在 promise 'catch' 块中使用 yield
【发布时间】:2018-10-03 14:56:55
【问题描述】:

我对 redux-saga 还很陌生,并且只在下面的 axios 承诺中收到错误 yield is a reserved word in strict mode。我确实不会在第二次尝试/捕获时遇到此错误

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

但这是一个技巧。任何见解/替代方案将不胜感激。

【问题讨论】:

    标签: reactjs redux redux-saga saga


    【解决方案1】:

    你可以在 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));
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-07-08
      • 1970-01-01
      • 2017-07-27
      • 2016-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多