终极传奇。无法在 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));
}
}
我是 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));
}
}