2017-09-03 1 views
0

Je travaille sur l'application React/Redux, je dois supprimer l'adresse de l'utilisateur, j'utilise redux saga comme middleware, la fonctionnalité fonctionne bien, mais le problème est après la suppression de l'adresse la demande n'est pas entrée deleteAddressByBuyerIdAddressIdSuccess (dans le fichier saga.js), il entre dans seulement deleteAddressByBuyerIdAddressId et deleteAddressByBuyerIdAddressIdFailure (avoir vérifié dans les outils de développement Redux), peut me aider à régler ce problème,redux saga supprimer la fonctionnalité

My toutes les fonctionnalités et capture d'écran des outils de développement redux est donnée ci-dessous

Fichier d'action

/* Delete an address for a buyer */ 
const deleteAddressByBuyerIdAddressId = 
    (buyerId: string, addressId: string, address: Object, params: string) => ({ 
     type: Types.DELETE_ADDRESS_BY_BUYER_ID_ADDRESS_ID, 
     buyerId, 
     addressId, 
     address, 
     params, 
    }); 

const deleteAddressByBuyerIdAddressIdSuccess = 
    (buyerId: string, addressId: string, address: Object, params: string) => ({ 
     type: Types.DELETE_ADDRESS_BY_BUYER_ID_ADDRESS_ID_SUCCESS, 
     buyerId, 
     addressId, 
     address, 
     params, 
    }); 

const deleteAddressByBuyerIdAddressIdFailure = 
    (errorMessage: Object) => ({ 
     type: Types.DELETE_ADDRESS_BY_BUYER_ID_ADDRESS_ID_FAILURE, 
     errorMessage, 
    }); 

fichier Saga

/* Delete Buyers address */ 
function* deleteAddressByBuyerIdAddressId(action) { 
    try { 
     const response = yield call(
      api.account.deleteAddressByBuyerIdAddressId, 
      action.buyerId, 
      action.addressId, 
      action.address, 
      action.params 
     ); 
     if (response.ok && response.data && {}.hasOwnProperty.call(response.data, 'data')) { 
      yield put(
      Actions.deleteAddressByBuyerIdAddressIdSuccess(
       action.buyerId, 
       action.addressId, 
       response.data, 
       action.address, 
       action.params 
     ) 
    ); 
     } else { 
      yield put(Actions.deleteAddressByBuyerIdAddressIdFailure(response.errorMessage)); 
     } 
    } catch (error) { 
     yield put(Actions.deleteAddressByBuyerIdAddressIdFailure(error)); 
    } 
} 
function* watchDeleteAddressByBuyerIdAddressId(): Generator<void, void, void> { 
    yield takeLatest(Types.DELETE_ADDRESS_BY_BUYER_ID_ADDRESS_ID, deleteAddressByBuyerIdAddressId); 
} 

Reducers

export const deleteAddressByBuyerIdAddressId = (state: Object = INITIAL_STATE) => ({ 
    ...state, 
    isLoading: true, 
    successMessage: null, 
    errorMessage: null, 
}); 

export const deleteAddressByBuyerIdAddressIdSuccess = (state: Object = INITIAL_STATE, action: Object) => { 
    const successMessage = I18n.getText('account.address-deleted', {}, 'Address deleted!'); 
    return { 
     ...state, 
     address: action.address, 
     successMessage: successMessage, 
     } 
}; 

export const deleteAddressByBuyerIdAddressIdFailure = (state: Object = INITIAL_STATE, action: Object) => ({ 
    ...state, 
    errorMessage: action.errorMessage, 
    isLoading: false, 
}); 

outils de développement redux voir

enter image description here


+0

Votre programme est en cours de prise ou il va dans autre? –

+2

oui, mon programme va dans le catch ou sinon bloquer, car leur est nulle en réponse après la suppression de l'adresse de l'utilisateur, pouvez-vous me dire s'il vous plaît sollution, merci d'avance – wali

+2

Si vous obtenez réponse null, alors il a être un problème avec votre fonction 'call'. –

Répondre

1

Vous n'avez pas besoin que if, else partie. Au lieu de cela, si la requête aboutit, appelez simplement l'action de succès dans le bloc try lui-même. Sinon, dans votre bloc catch, invoquez l'action d'échec. Cela ferait le travail pour vous. Voici l'exemple de code.

/* Delete Buyers address */ 
function* deleteAddressByBuyerIdAddressId(action) { 
    try { 
     const response = yield call(
      api.account.deleteAddressByBuyerIdAddressId, 
      action.buyerId, 
      action.addressId, 
      action.address, 
      action.params 
     ); 
      yield put(
      Actions.deleteAddressByBuyerIdAddressIdSuccess(
       action.buyerId, 
       action.addressId, 
       response.data, 
       action.address, 
       action.params 
     ) 
    ); 
    } catch (error) { 
     yield put(Actions.deleteAddressByBuyerIdAddressIdFailure(error)); 
    } 
} 
function* watchDeleteAddressByBuyerIdAddressId(): Generator<void, void, void> { 
    yield takeLatest(Types.DELETE_ADDRESS_BY_BUYER_ID_ADDRESS_ID, deleteAddressByBuyerIdAddressId); 
}