Reactjs 重用和重写方法以适应类型响应和其他对象
我有一个现有的方法来处理承诺响应中的错误,如下所示: 错误处理程序/operations.jsReactjs 重用和重写方法以适应类型响应和其他对象,reactjs,promise,dispatch,Reactjs,Promise,Dispatch,我有一个现有的方法来处理承诺响应中的错误,如下所示: 错误处理程序/operations.js const makeResourceErrorHandler = resource => error => (dispatch, getState) => { if (error.response && error.response.status >= 300) { error.response .json()
const makeResourceErrorHandler = resource => error => (dispatch, getState) => {
if (error.response && error.response.status >= 300) {
error.response
.json()
.then(body => {
body.reason = error.message;
body.status = error.response.status;
dispatch(fetchError(body));
})
}
};
const resourceErrorHandler = errorHandlerOperations.makeResourceErrorHandler('payment');
return promise
.then(() => {
return true;
})
.catch(error => {
dispatch(resourceErrorHandler(error));
return false;
});
const resourceErrorHandler = errorHandlerOperations.makeResourceErrorHandler('profile');
const processEventFromEventListener = response => (dispatch) => {
const error = {};
error.response = response.data;
error.response.status = response.data.statusCode;
error.message = response.data.message;
dispatch(resourceErrorHandler(error));
}
在payment/operations.js中使用它
const makeResourceErrorHandler = resource => error => (dispatch, getState) => {
if (error.response && error.response.status >= 300) {
error.response
.json()
.then(body => {
body.reason = error.message;
body.status = error.response.status;
dispatch(fetchError(body));
})
}
};
const resourceErrorHandler = errorHandlerOperations.makeResourceErrorHandler('payment');
return promise
.then(() => {
return true;
})
.catch(error => {
dispatch(resourceErrorHandler(error));
return false;
});
const resourceErrorHandler = errorHandlerOperations.makeResourceErrorHandler('profile');
const processEventFromEventListener = response => (dispatch) => {
const error = {};
error.response = response.data;
error.response.status = response.data.statusCode;
error.message = response.data.message;
dispatch(resourceErrorHandler(error));
}
现在,我想重用上面的代码并处理我在eventListener中得到的响应
profile/operations.js
const makeResourceErrorHandler = resource => error => (dispatch, getState) => {
if (error.response && error.response.status >= 300) {
error.response
.json()
.then(body => {
body.reason = error.message;
body.status = error.response.status;
dispatch(fetchError(body));
})
}
};
const resourceErrorHandler = errorHandlerOperations.makeResourceErrorHandler('payment');
return promise
.then(() => {
return true;
})
.catch(error => {
dispatch(resourceErrorHandler(error));
return false;
});
const resourceErrorHandler = errorHandlerOperations.makeResourceErrorHandler('profile');
const processEventFromEventListener = response => (dispatch) => {
const error = {};
error.response = response.data;
error.response.status = response.data.statusCode;
error.message = response.data.message;
dispatch(resourceErrorHandler(error));
}
popupwindow.jsx
window.addEventListener(
'message',
function(response) {
if (response.data !== '' && typeof response.data !== 'undefined') {
dispatch(
profileOperations.processEventFromEventListener(response)
);
}
},
false
);
问题是我从eventListener
得到的响应不是response
类型,我得到了错误:
error.response.json is not a function
我尝试将响应更改为“承诺”,但它给了我相同的错误:
const resourceErrorHandler = errorHandlerOperations.makeResourceErrorHandler('profile');
const processEventFromEventListener = response => (dispatch) => {
const error = {};
error.response = response.data;
error.response.status = response.data.statusCode;
error.message = response.data.message;
Promise.resolve(error)
.then(error => {
error.response
.json()
.then(body => {
console.log('body', body);
});
dispatch(resourceErrorHandler(error));
}
TypeError: error.json is not a function