[英]jQuery AJAX `always` isn't “always” called
具體來說,當在done
(或fail
)處理程序中引發錯誤時, always
不會調用always
處理程序。
我已經像這樣“修復”了這個問題:
xhr.done(delayThrow(function(response) { /* .. do stuff .. */ }));
function delayThrow(fn) {
return function() {
try {
fn.apply(this,arguments);
} catch(e) {
setTimeout(function() {
throw e;
},10);
}
};
}
這有效,並且(令我驚訝的是)調用堆棧保持不變*。 但這似乎是一個非常棘手的解決方案。 有沒有更好的方法,還是我要解決這個錯誤?
*我認為這是因為已經創建了異常對象,並且該異常對象只是在未考慮諸如setTimeout
類的以后調用堆棧的情況下拋出的
所以,我的猜測是, always
回調(確實)有點誤導,只有火災時,在請求期間發生了錯誤,而不是之后,它已經完成。
似乎deferred.then()
會完成工作並在每種情況下都會被調用。 但是,這似乎只在jQuery 3+上有效,這就是為什么我不能發布SO示例(顯然限於版本2)的原因。
演示在這里: https : //jsfiddle.net/78ux6jhL/
請注意, deferred.then()
3個回調參數,第一個參數在初始請求成功時,第二個參數在失敗時。 只是通過相同功能的兩次模擬actuallyAlways
你想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.