【发布时间】:2019-06-02 13:56:16
【问题描述】:
我是 throw 处理我的 XMLHttpRequest 对象的 onload 方法的异常。但是我无法使用try catch 块来catch 那个错误。
我的_fetch(url, callback) 函数中有以下代码:
const xhr = new XMLHttpRequest()
xhr.onload = function () {
if (xhr.readyState === xhr.DONE) {
// if (xhr.status === 200) callback(xhr.response)
// throw a 'custom' error if the server responds with 501
if (xhr.status === 501) throw new Error('Answer not found') /
}
}
// rest of the fn
然后,我正在使用_fetch 函数:
try {
_fetch(endPoint, response => console.log(response))
} catch (error) { // error not caught
console.log(error)
}
但是,错误并没有被捕获,而是抛出了一个错误——Uncaught Error: Answer not found
我尝试过的:
-
trycatchingingxhr对象的send()方法在_fetch -
trycatching_fetch中xhr对象的open()方法@ - 使用
xhr对象的onerror方法 - 将不起作用,因为请求已成功完成
那么,我怎么能catch那个错误呢?
要试用完整代码,请查看this fiddle。
为什么需要throwonload方法中的错误?
我正在从某个 API 获取数据,由于某些限制,我无法使用 fetch。我改用XMLHttpRequest。如果我发送的查询无法回答,服务器会返回错误代码501 - Not Implemented。
因此,我需要挑选出那个错误代码,并执行一些功能。
显然,还有其他可能的方法可以实现我的最终目标,但我发现很难理解为什么这不起作用。我已经阅读了throw 和XMLHttprequest,但我可能对其中一个的工作原理存在误解。
【问题讨论】:
标签: javascript ajax xmlhttprequest