重用和重写方法以同时容纳类型Response和其他对象

问题描述

我有一个现有的方法来处理我在诺言响应中遇到的错误,如下所示:

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

在Payment / operations.js中使用它

const resourceErrorHandler = errorHandlerOperations.makeResourceErrorHandler('payment');

return promise
     .then(() => {
         return true;
     })
     .catch(error => {
         dispatch(resourceErrorHandler(error));
         return false;
     });

现在,我想重用上面的代码并处理在eventListener中获得的响应。

profile / operations.js

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

我尝试将响应更改为promise,但这给了我同样的错误

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)