1 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊
xmlhttprequestnode.js的庫(kù)沒(méi)有完全正確地實(shí)現(xiàn)規(guī)范。
如果我們深入研究 github 上的代碼,我們會(huì)看到以下代碼行:
if (self.readyState === self.DONE && !errorFlag) {
self.dispatchEvent("load");
// @TODO figure out InspectorInstrumentation::didLoadXHR(cookie)
self.dispatchEvent("loadend");
}
所以load和loadend事件處理程序僅在沒(méi)有錯(cuò)誤時(shí)觸發(fā),與我們的觀察一致
xhr.onloadend = function() {
// This should get logged, but it doesn't.
console.log( 'The request has completed.' );
};
只會(huì)在事件成功時(shí)記錄。
我的建議是在.onerror()處理程序中手動(dòng)觸發(fā)事件,這確實(shí)有效。請(qǐng)記住,這是一個(gè) 3rd 方 node.js 模塊,而不是原生模塊。
就個(gè)人而言,我只是圍繞 xmlhttprequest 編寫了一個(gè)模擬.fetch()接口的小包裝器。node.js 版本使用原生 node.jshttp庫(kù),客戶端版本使用 xmlhttprequest。
這樣我就可以.fetch()對(duì)前端和后端代碼使用相同的API,讓系統(tǒng)決定它是使用本機(jī)提取、xmlhttp 支持的提取還是 http 支持的提取。
添加回答
舉報(bào)