我使用的是JSON。解析有时包含404响应的响应。在返回404的情况下,是否有办法捕获异常,然后执行一些其他代码?

data = JSON.parse(response, function (key, value) {
    var type;
    if (value && typeof value === 'object') {
        type = value.type;
        if (typeof type === 'string' && typeof window[type] === 'function') {
            return new(window[type])(value);
        }
    }
    return value;
});

当前回答

你可以试试这个:

Promise.resolve(JSON.parse(response)).then(json => {
    response = json ;
}).catch(err => {
    response = response
});

其他回答

如果JSON.parse()的参数不能解析为JSON对象,则此承诺将无法解析。

Promise.resolve(JSON.parse('{"key":"value"}')).then(json => {
    console.log(json);
}).catch(err => {
    console.log(err);
});

我们可以检查错误& 404 statusCode,并使用try {} catch (err){}。

你可以试试这个:

const req = new XMLHttpRequest(); req.onreadystatechange = function() { if (req.status == 404) { console.log("404"); return false; } if (!(req.readyState == 4 && req.status == 200)) return false; const json = (function(raw) { try { return JSON.parse(raw); } catch (err) { return false; } })(req.responseText); if (!json) return false; document.body.innerHTML = "Your city : " + json.city + "<br>Your isp : " + json.org; }; req.open("GET", "https://ipapi.co/json/", true); req.send();

阅读更多:

为XHR捕获404错误

如果你在寻找这个的广义函数,试试这个。

const parseJSON = (inputString, fallback) => {
  if (inputString) {
    try {
      return JSON.parse(inputString);
    } catch (e) {
      return fallback;
    }
  }
};

我建议你使用这个作为ES6的最佳实践。使用Error对象

尝试{ myResponse = JSON.parse(response); } catch (e) { 抛出新的错误('错误已发生:',e); }

以上回答也有帮助,

你可以试试这个:

Promise.resolve(JSON.parse(response)).then(json => {
    response = json ;
}).catch(err => {
    response = response
});