Skip to content

Instantly share code, notes, and snippets.

@iulia-codes
Forked from anonymous/actions.ts
Created February 2, 2018 11:31
Show Gist options
  • Save iulia-codes/e4514bd4412a11a648936efe14c3afe8 to your computer and use it in GitHub Desktop.
Save iulia-codes/e4514bd4412a11a648936efe14c3afe8 to your computer and use it in GitHub Desktop.
Error handling in redux with sagas
import {
SHOULD_ASK_BACKEND_SOMETHING,
DID_ASK_BACKEND_SOMETHING,
DID_FAIL_TO_ASK_BACKEND_SOMETHING,
} from './constants';
export const shouldAskBackendSomething = (payload) => ({
type: SHOULD_ASK_BACKEND_SOMETHING,
payload,
});
export const didAskBackendSomething = (payload) => ({
type: DID_ASK_BACKEND_SOMETHING,
payload,
});
export const didFailToAskBackendSomething = (payload) => ({
type: DID_FAIL_TO_ASK_BACKEND_SOMETHING,
payload,
});
export const SHOULD_ASK_BACKEND_SOMETHING = 'app/SHOULD_ASK_BACKEND_SOMETHING';
export const DID_ASK_BACKEND_SOMETHING = 'app/DID_ASK_BACKEND_SOMETHING';
export const DID_FAIL_TO_ASK_BACKEND_SOMETHING = 'app/DID_FAIL_TO_ASK_BACKEND_SOMETHING';
import {
SHOULD_ASK_BACKEND_SOMETHING,
DID_ASK_BACKEND_SOMETHING,
DID_FAIL_TO_ASK_BACKEND_SOMETHING,
} from './constants';
export default (state, action) => {
switch (action.type) {
case SHOULD_ASK_BACKEND_SOMETHING:
return state
.set('loading', true);
case DID_ASK_BACKEND_SOMETHING:
return state
.set('loading', false)
.set('result', action.payload);
case DID_FAIL_TO_ASK_BACKEND_SOMETHING:
return state
.set('errorOverlayVisible', true)
.set('loading', false)
.set('error', action.payload);
default:
return state;
}
}
import {
SHOULD_ASK_BACKEND_SOMETHING,
} from './constants';
import {
backendOperation,
} from 'mySuperBackendService';
import {
didAskBackendSomething,
didFailToAskBackendSomething,
} from './actions';
function* shouldAskBackendSomethingHandler(action) {
try {
const {
payload: {
...params
}
} = action;
const result = yield call([backendOperation, backendOperation.post], params);
yield put(didAskBackendSomething, result);
} catch (err) {
/* Do error handling which isn't relevant for the state here */
yield put(didFailToAskBackendSomething, err);
}
}
export function* shouldAskBackendSomethingSaga() {
yield takeEvery(SHOULD_ASK_BACKEND_SOMETHING, shouldAskBackendSomethingHandler);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment