失敗した ajax リクエストを特定の制限まで再試行する関数を作成する必要がありますが、次のように、再試行の最大数を超えた場合にのみプロミスが拒否されるようにする必要があります。
function my_ajax(...) { ... }
// then I use it this way
return $.when(my_ajax('foo.json'), my_ajax('bar.json'))
jQuery.when を使用するには、1 つの promise のみを返す必要がありmy_ajax
ます。これは、内部の jQuery.ajax が解決されたときに解決され、最大の再試行が行われたときにのみ拒否されます。
私が作ったコードはこれです:
function do_ajax(args, dfd, attempt) {
dfd || (dfd = $.Deferred());
attempt || (attempt = 1);
$.ajax(args).then(dfd.resolve, function(xhr, text_status, error_thrown) {
console.error(/* something useful */);
attempt++;
if(attempt > 3) {
dfd.reject(xhr, text_status, error_thrown);
} else {
do_ajax(args, dfd, attempt);
}
});
return dfd.promise();
}
// in some random code
return $.when(do_ajax({url:'foo.json'}), do_ajax({url:'bar.json'});
これは私にとってはうまくいきます*が、理解するのはちょっと難しいです。問題は、それを行うためのより良い(そして読みやすい)方法はありますか?
* - 実際、時々失敗することをテストしていませんが、最初の ajax リクエストが成功したときは問題なく動作します。