我对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。任何见识/替代方案将不胜感激。
答案 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));
}
}