Open gloriaJun opened 5 years ago
function* apiSaga(api, asyncAction, options) {
yield put(asyncAction.request())
try {
const payload = options && options.apiPayload
const result = yield call(api, payload)
yield put(asyncAction.success({ result }))
} catch (error) {
const failAction = asyncAction.fail({ error })
yield call(errorHandler, failAction)
yield put(failAction)
}
}
export function* fetchNoticesSaga(action) {
yield call(apiSaga, NoticesAPI.getNotices, fetchNotices, {
apiPayload: action.payload,
})
}
export default function* sagaCreator(action, api, { payload }) {
const { pending, success, fail } = action;
const { onSuccess, onError, ...data } = payload || {};
yield put(pending());
try {
const result =
typeof api === 'function' ? yield call(api, ObjectUtils.isObject(payload) ? data : payload) : yield all(api);
yield put(success(result));
onSuccess && onSuccess();
} catch (error) {
yield put(fail({ error }));
onError && onError();
}
}
export default function* sagaCreator(actionApi, resultData, onSuccess, onError) { const { pending, success, fail } = actionApi;
yield put(pending()); try { yield put(success(resultData)); onSuccess && onSuccess(); } catch (error) { yield put(fail({ error })); onError && onError(error); } }
https://medium.com/@FourwingsY/redux-redux-saga-%EB%A1%9C-async-%EB%8B%A4%EB%A3%A8%EA%B8%B0-b7b9a9110356