【问题标题】:Error bubbles to console even though it is handled即使已处理,错误也会冒泡到控制台
【发布时间】:2017-05-11 00:42:46
【问题描述】:

我正在使用isomorphic-fetch 执行来自我的react-redux 应用程序的AJAX 请求。在我的 api 中间件中,我有以下调用外部资源的函数:

import fetch from 'isomorphic-fetch';

function callApi({ endpoint, method, body, params = {} }) {
    let route = generateRoute(endpoint, params);
    return fetch(route, generateFetchOptions(method, body))
        .then(response =>  {
            if (!response.ok) {
                return Promise.reject(response);
            }

            return response.json();
        });
}

上面的函数由以下代码调用:

return callApi(callAPI).then(
    response => next(actionWith({
        response,
        type: successType,
        statusCode: 200
    })),
    error => error.json().then(errorObject => {
        return next(actionWith({
            type: failureType,
            statusCode: errorObject.statusCode,
            error: errorObject.message || 'Something bad happened'
        }));
    })
);

如果我用Promise.reject(response) 拒绝,则错误处理程序正在处理错误,但由于某种原因,错误也会冒泡到浏览器控制台(在我的情况下为 Chrome)。

这是来自控制台的屏幕截图,显示了正在发生的事情(api.js:34callApi 方法的第二行):

【问题讨论】:

  • 具体是哪个错误?你拒绝的response 甚至不是Error
  • 我作为 Promise.reject 返回的任何错误。我确实处理了它们,但它们以某种方式设法到达控制台
  • 请张贴您的控制台截图。响应对象不是错误,不应在控制台上显示。但是,您的代码中还有许多其他内容可能会出错并导致此处显示错误。
  • 所以 `error.json' 是一个 promise-returning 函数!?
  • 这不是任何 javascript 的错误,只是浏览器默认告诉你有一个 http 错误(未找到资源)。

标签: javascript promise ecmascript-6 fetch isomorphic-fetch-api


【解决方案1】:

这是在 HTTP 请求期间遇到错误时的常见行为(可能在每个浏览器中?)(无论是无法找到链接的图像,还是 XHR 失败)。无论如果以及如何处理这些错误,它们都会始终被记录到控制台。没有办法抑制这种行为。

参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多