Redux-saga在catch块中产生put()未执行

时间:2017-07-14 14:39:12

标签: javascript reactjs redux redux-saga

我遇到的奇怪问题。出于某种原因,我的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))没有被发出... 见下文:

enter image description here

有什么想法吗?感谢

1 个答案:

答案 0 :(得分:1)

在我看来,createLoginFailAction函数中存在错误,如果是这样会导致您看到的结果。