我遇到的奇怪问题。出于某种原因,我的put
块中的catch
未在下面执行。这是我的传奇:
function* postLoginFormSaga(action) {
let response;
try {
// Data from emitting login action
response = yield call(AuthenticationApi.login, action.formData);
yield put(createLoginSucceedAction());
yield put(push('/dashboard/summary'));
} catch (e) {
console.log(e);
yield put(createLoginFailAction(response))
}
}
我的api调用,它有一个自定义中间件来处理非2XX
响应:
static login = (formData) => {
return fetch('/api/login', {
method: 'POST',
body: formData,
credentials: 'same-origin'
}).then(handleFetchErrorMiddleWare)
.then(r => r.json())
};
中间件函数是一个检查ok
对象的response
属性的简单函数:
export function handleFetchErrorMiddleWare(response) {
if (!response.ok){
throw Error(response.status)
}
return response
}
中间件工作正常,因为我可以在抛出异常时看到console.log(e)
的输出,但yield put(createLoginFailAction(response))
没有被发出...
见下文:
有什么想法吗?感谢
答案 0 :(得分:1)
在我看来,createLoginFailAction
函数中存在错误,如果是这样会导致您看到的结果。