对redux Promise函数做出反应以异步/等待

时间:2019-06-20 07:27:30

标签: reactjs redux promise async-await es6-promise

我具有以下redux函数,将新用户添加到我的数据库中。它工作正常,但是如果我在then中引入另一个调用,可能需要对所有内容进行大量捕获。 如果我们将async放入try/Catch中来处理所有错误该怎么办? 我尝试了一个样本,但一直缺少一些东西。 有人可以帮我安排一下。谢谢。

export function newUser(values) {
return function(dispatch) {
    const promise = axios.post(URL)

    dispatch(createAdminUsersRequest(promise));

    promise.then(
        user => {
            dispatch(createUsersSuccess(user));
            dispatch(fetchUsers());
            dispatch(switchUserActions(false, false, false));
        },
        function(error) {
            if (error && error.response && error.response.data)
                error = error.response.data;
            if (error && error.data) {
                error = error.data;
            }
            dispatch(createUsersFail(errors(error)));
            setTimeout(() => dispatch(createUsersFail(null)), 6000);
        }
    );

    return promise;
};

}

1 个答案:

答案 0 :(得分:1)

将诺言转换为异步等待非常简单。首先,通过向其添加一个async关键字来将该函数声明为async。其次,您在承诺中使用await

export function newUser(values) {

    return async function(dispatch) {

        dispatch(createAdminUsersRequest(promise));
        try {
            const user = await axios.post(URL);
            dispatch(createUsersSuccess(user));
            dispatch(fetchUsers());
            dispatch(switchUserActions(false, false, false));
        } catch(error) {
            if (error && error.response && error.response.data)
                 error = error.response.data;
            if (error && error.data) {
                 error = error.data;
            }
            dispatch(createUsersFail(errors(error)));
            setTimeout(() => dispatch(createUsersFail(null)), 6000);
        }
    };
}