我需要创建一个函数,重试失败的ajax请求,直到给定的限制,但我需要确保只有在超过最大重试次数时才会拒绝承诺,如下所示:重试失败jQuery.ajax请求
function my_ajax(...) { ... }
// then I use it this way
return $.when(my_ajax('foo.json'), my_ajax('bar.json'))
为了与jQuery.when工作,只有一个承诺应当返还的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请求成功时我工作的很好。
可能的[使用jQuery失败时重试AJAX请求的最佳方式是什么?](http ://stackoverflow.com/questions/10024469/whats-the-best-way-to-retry-an-ajax-request-on-failure-using-jquery) – user2284570