Отреагировать на функцию Promise для редукса на асинхронное / ожидание - PullRequest
0 голосов
/ 20 июня 2019

У меня есть следующая функция приставки, добавляющая нового пользователя в мою базу данных. Это работает нормально, но в случае, если я введу еще один вызов в моем 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 Ответ

1 голос
/ 20 июня 2019

Преобразование в обещание async-await довольно просто.Сначала вы объявляете функцию как 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);
        }
    };
}
...