Если вы действительно хотите изменить Promise -> async / await, тогда изменения будут следующими:
Для начала, вам НЕ нужно, чтобы dataService был async
, поскольку это будет означать, что он возвращает Promise,который меняет то, как он должен быть вызван - вы не хотите, чтобы
Во-вторых, изменение
const promise = axios.get ...
promise.then(response ....
на
const promise = await axios.get ...
promise.then(response ....
не будет работать ...
это должно быть
const response = await axios.get ...
нет необходимости в переменной обещания
Несмотря на это, вы все еще используете обещания в преобразованном коде ...который теперь отличается только наличием async
ключевых слов без причины
Вот как ваш (оригинальный) код должен быть преобразован в async / await
обратите внимание на общий НЕДОСТАТОК слова Promise в чемследует:
const dataService = (url, options, dataToPost) => {
return async (dispatch, getState) => {
const { requestAction, successAction, failureAction } = options.actions;
if (options.shouldRequest(getState())) {
const data = typeof dataToPost === 'string' ? { data: dataToPost } : dataToPost;
dispatch(requestAction());
try {
const response = dataToPost
? await axios.post(url, data, { withCredentials: true })
: await axios.get(url, { withCredentials: true });
if (response.status === 200) {
return dispatch(successAction(response, dispatch));
}
throw response;
} catch(error) {
if (error.response.status === 302) {
window.location = '/view';
}
dispatch(openErrorDialog());
return dispatch(failureAction(error));
}
}
throw new Error('FETCHING');
};
};