私が知っているように、jQueryでajaxを使用しています。$.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...
実際に出力されているものの:fail
コールバックが直後にトリガーされるように
error: 0
All retries failed...
error: 1
error: 2
が見えます最初の呼び出しは失敗しますが、私はfail
コールバックが必要ですすべての再試行が失敗した後にトリガされます。
すべての再試行が失敗した場合にのみ、ajaxPromise.fail
コールバックをトリガーする方法はありますか?または、これを行うための他のオプションがありますか?
にチェーン
.fail()
にパラメータとして渡さxhr
あなたはスコープの中でどのようにねじれている知っている、現在のAjaxのオプションにthis
セットで繰延オブジェクトを拒否しましたJavaScript?私は確信していませんが、ネストされたajax呼び出しを信じて、あなたの 'triedCount'変数は失われています。多分コールバックの変数を渡してみてください、そして、オプションとしてajaxコールをしますか? –どのヘッダが返されているかを事前に知っていますか?はいの場合は、statuCodeコールバックを使用できます。 –
@MridulKashyap 'triedCount'変数は何のスコープの問題:) – coderz