首先net::ERR_FILE_NOT_FOUND
是浏览器错误(请参阅Chromium/Chrome 错误列表 https://cs.chromium.org/chromium/src/net/base/net_error_list.h, Chrome 失败错误代码 https://stackoverflow.com/questions/42524254/chrome-fail-error-codes,所以你无法用JS代码捕获它。
具体来说net::ERR_FILE_NOT_FOUND
“并不表示致命错误。通常此错误将作为通知生成”。
所以最好的方法是附加onloadend
处理程序到XMLHttpRequest
,在 Ajax 请求完成时触发(无论成功还是失败)。
But 你无法检查状态,实际上的值status
, statusText
and readyState
的属性XMLHttpRequest
在文件存在的情况下和在未找到文件的情况下总是:
status: 0
statusText: ""
readyState: 4
相反你可以检查属性response
, responseText
and responseURL
当找不到文件或其他情况时,其值为“”:
response: <file content>
responseText: <file content>
responseURL: "file:///..."
其他要检查的值是event
(进度事件)loaded
如果找不到文件(或在其他情况下加载的字节),该属性的值为 0。
所以代码可以是:
const readFile = (filePath) => {
return new Promise(function (resolve, reject) {
const xhr = new XMLHttpRequest()
xhr.onloadend = (event) => {
console.log("xhr.onloadend", event, xhr.status, xhr.statusText, xhr.readyState, xhr);
if (event.loaded && xhr.response) {
resolve(xhr.response);
} else {
reject("error");
}
}
xhr.open('GET', filePath);
xhr.send();
});
}