Зачем вам обертка?Просто поместите его в блок try / catch:
export function* logoutSaga() {
try {
yield put(logoutRequest());
yield call(api.logout);
yield localStorage.clear();
yield put(logoutSuccess());
} catch(e) {
yield put(logoutFailure(parseError(e)));
}
}
Кроме того, вы можете полностью исключить необходимость разбора ошибок, поместив функции API в оболочку.Например:
class ApiError {
constructor(err, helpful) {
this.original = err;
this.helpful = helpful;
}
}
const logout = () => {
try {
return axios.post("accounts/logout/");
} catch (err) {
throw new ApiError(err, 'There was a problem logging out.');
}
}
Затем в ваших функциях обработки ошибок вы можете проверить, является ли выброшенная ошибка "instanceof ApiError
", и отобразить err.helpful
для конечного пользователя.Вы можете пойти еще дальше к конструктору ApiError
, проанализировать исходную ошибку и изменить this.helpful
в зависимости от возвращенного результата.