2017-09-03 99 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); 
}