sagas.ts
1 import { SagaIterator } from 'redux-saga'; 2 import { call, put, takeLatest } from 'redux-saga/effects'; 3 4 import { fetchRates, CCResponse } from 'api/rates'; 5 import * as types from './types'; 6 import * as actions from './actions'; 7 8 export function* fetchRatesSaga(action: types.FetchCCRatesRequested): SagaIterator { 9 try { 10 const rates: CCResponse = yield call(fetchRates, action.payload); 11 yield put(actions.fetchCCRatesSucceeded(rates)); 12 } catch (e) { 13 console.error('Failed to fetch rates:', e); 14 yield put(actions.fetchCCRatesFailed()); 15 return; 16 } 17 } 18 19 export function* ratesSaga(): SagaIterator { 20 yield takeLatest(types.RatesActions.CC_REQUESTED, fetchRatesSaga); 21 }