我需要创建一个函数,在给定限制之前重试失败的 ajax 请求,但我需要确保仅在超过最大重试次数时才拒绝承诺,如下所示:
function my_ajax(...) { ... }
// then I use it this way
return $.when(my_ajax('foo.json'), my_ajax('bar.json'))
为了与 jQuery.when 一起工作,应该只返回一个 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 请求成功时我工作正常。