2017-07-21 1 views
0

J'utilise redux saga pour gérer mes opérations asynchrones. J'ai un appel à l'actionCreator sur le composant Mount. Mais la saga est appelée plusieurs fois. Et par conséquent l'appel d'api est appelé continuellement. Comment résoudre ça?Comment résoudre l'erreur saga a été annulée?

Veuillez trouver ci-dessous mon code.

import { takeLatest, put, call } from 'redux-saga/effects'; 
import MyOrdersApi from 'yoda-interfaces/lib/MyOrders/MyOrders'; 
import * as MyOrdersActionTypes from '../actionTypes/MyOrdersActionTypes'; 

export function* myOrdersSaga(action){ 
    try { 
    const myOrders = yield call(MyOrdersApi.getMyOrders); 
    yield put({ type: MyOrdersActionTypes.GET_MY_ORDERS, myOrders }) 
    } 
    catch(error){ 
    yield put({ type: MyOrdersActionTypes.GET_MY_ORDERS_ERROR, error }) 
    } 

} 

export default function* watchMyOrdersSaga() { 
    yield takeLatest(MyOrdersActionTypes.GET_MY_ORDERS, myOrdersSaga); 
} 
+0

La saga semble bien. Le problème est peut-être lorsque vous l'appelez lors du montage du composant. –

Répondre

0

Le problème était que je dispatching la même action de la myOrdersSaga que mon watchMyOrdersSaga écoute pour ce qui a récursive appeler l'api. Le code correct aurait dû être

import { takeLatest, put, call } from 'redux-saga/effects'; 
import MyOrdersApi from 'yoda-interfaces/lib/MyOrders/MyOrders'; 
import * as MyOrdersActionTypes from '../actionTypes/MyOrdersActionTypes'; 

export function* myOrdersSaga(action){ 
    try { 
    const myOrders = yield call(MyOrdersApi.getMyOrders); 
    yield put({ type: MyOrdersActionTypes.GET_MY_ORDERS_SUCCESS, myOrders }) 
    } 
    catch(error){ 
    yield put({ type: MyOrdersActionTypes.GET_MY_ORDERS_ERROR, error }) 
    } 

} 

export default function* watchMyOrdersSaga() { 
    yield takeLatest(MyOrdersActionTypes.GET_MY_ORDERS, myOrdersSaga); 
}