Итак, по сути, у меня есть шаблон, который я хотел бы использовать в своих вызовах API. По сути, это блок try catch finally
, в который я отправляю серию действий. Вместо того, чтобы копировать и вставлять этот шаблон повсюду, я хотел бы создать функцию-обертку, в которой все, что я передаю, это необходимые параметры, API-функции и действия диспетчеризации.
Моя функция блокировки вызова try выглядит следующим образом:
export function getTokenAPI(username, password) {
return async function action(dispatch) {
try {
dispatch(loadingActions.loadingInProgress(true));
const { data } = await API.authGetToken(username, password);
const { success } = data;
console.log('get token api data', data);
if (success) {
dispatch(setData(data));
dispatch(setTokenSuccess());
} else if (!success) {
const { errorMessage } = data;
throw Error(errorMessage || 'You broke it, not my fault');
}
} catch (e) {
dispatch(errorActions.addError(e.message));
dispatch(errorActions.removeError());
} finally {
dispatch(loadingActions.loadingInProgress(false));
}
};
}
Итак, оболочка, которую я пытался создать, выглядит следующим образом:
function wrapper(apiFunction, dispatchAction) {
return async function action(dispatch) {
try {
dispatch(loadingActions.loadingInProgress(true));
const { data } = await apiFunction(arg1, arg2);
const { success } = data;
if (success) {
dispatch(dispatchAction(data));
} else if (!success) {
const { errorMessage } = data;
throw Error(errorMessage || 'meh');
}
} catch (e) {
dispatch(errorActions.addError(e.message));
dispatch(errorActions.removeError());
} finally {
dispatch(loadingActions.loadingInProgress(false));
}
};
}
С этим я в конечном итоге могу просто запустить
wrapper(apiFunction(username, password), setData)
, но я получаюTypeError Cannot read property type of undefined
. Мне интересно, правильно ли я иду по этому поводу.
Есть предложения или рекомендации?