2017-09-03 83 views
0

我正在处理React/Redux应用程序,我必须删除用户地址,我使用REDX传奇作为中间件,功能工作正常,但问题是删除地址后请求未进入deleteAddressByBuyerIdAddressIdSuccess(在saga.js文件),它正在进入只有deleteAddressByBuyerIdAddressIddeleteAddressByBuyerIdAddressIdFailure(在终极版的开发工具已经检查),任何一个可以帮助我弄清楚这个问题,REDX传奇删除功能

我的所有功能,下面给出了REDX开发者工具的屏幕截图:

操作文件

/* 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, 
    }); 

佐贺文件

/* 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); 
} 

减速

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, 
}); 

终极版开发者工具查看

enter image description here


+0

您的程序正在赶上或它正在进入其他地方? –

+2

是的,我的程序进入catch或else块,因为它们在删除用户地址后的响应为空,请你告诉我这个溶剂,预先感谢 – wali

+2

如果你正在得到'null'响应,那么它有成为您的'呼叫'功能的问题。 –

回答

1

你不需要那么if, else一部分。相反,如果请求成功,则只需在try块内调用成功操作即可。否则在你的catch块内调用失败操作。那会为你做这份工作。这里是示例代码。

/* 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); 
}