2017-07-21 16 views
0

私は非同期操作を処理するためにredux sagaを使用しています。私はコンポーネントのマウントでactionCreatorを呼び出しています。しかし、このサーガは複数回呼び出されています。その結果、apiコールが継続的に呼び出されています。これをどうやって解決するのですか?サガがキャンセルされたというエラーを解決するにはどうすればよいですか?

以下の私のコードを見つけてください。

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

であるはずです。問題は、コンポーネントをマウントしているときに問題が発生している可能性があります。 –

答えて

0

問題は、私は私のwatchMyOrdersSagaは、それが再帰的にAPIを呼び出す行われる待機していることをmyOrdersSagaから同じアクションを派遣されたということでした。正しいコードは

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); 
} 
関連する問題