我使用jQuery與jQuery,因爲我們知道$.ajax
返回承諾ajaxPromise
。我的要求是:只有當所有的Ajax調用重試失敗時,ajaxPromise
捕獲失敗(我想處理ajax承諾回調函數內的錯誤)。jQuery ajax - 僅在所有重試失敗時觸發失敗回調函數
我嘗試下面的代碼:
function ajax(data) {
return $.ajax({
url: "...",
data: data,
triedCount: 0,
retryLimit: 3,
error: function(xhr, textStatus, errorThrown) {
console.log("error: " + this.triedCount);
this.triedCount++;
if (this.triedCount < this.retryLimit) {
$.ajax(this);
}
}
});
}
var ajaxPromise = ajax({"id": "123"});
ajaxPromise.fail(function(xhr) {
console.log("All retries failed...");
// all retries failed, handle error
});
輸出什麼,我想要的是:
error: 0
error: 1
error: 2
All retries failed...
雖然實際輸出爲:
error: 0
All retries failed...
error: 1
error: 2
貌似fail
回調後立即觸發第一次通話失敗,而我想要fail
回撥在所有重試失敗後觸發。
有沒有什麼辦法,只有當所有的重試失敗,然後觸發ajaxPromise.fail
回調?還是有其他的選擇可以做到這一點?
你知道如何扭曲的範圍界定在JavaScript的?我不確定,但我相信在嵌套的ajax調用中,您的'triedCount'變量會丟失。也許嘗試傳遞迴調中的變量,然後在ajax調用中作爲選項? –
您是否預先知道返回哪個標題?如果是的話,你可以使用statuCode回調。 –
@MridulKashyap'triedCount'變量沒有作用域問題:) – coderz