Javascript 延迟。总是()过早触发
结果(控制台): 为什么不推迟。总是()等待两个ajax调用完成?是否有任何延迟回调可以在所有请求完成时使用,而不管它们的状态如何 当(…)在所有Javascript 延迟。总是()过早触发,javascript,jquery,Javascript,Jquery,结果(控制台): 为什么不推迟。总是()等待两个ajax调用完成?是否有任何延迟回调可以在所有请求完成时使用,而不管它们的状态如何 当(…)在所有问题都得到解决时,或在任何问题被拒绝时,将触发其回调 由于第二个AJAX调用会导致错误,因此无论第一个AJAX调用是否成功,只要第二个AJAX调用发生错误,.when().always()就会发生 对于您的场景,我知道的唯一解决方案是为每个AJAX请求保留第二个$。延迟,然后解决每个AJAX请求的始终处理程序中的问题。然后在$中使用这些延迟。当调用时:
问题都得到解决时,或在任何问题被拒绝时,将触发其回调
由于第二个AJAX调用会导致错误,因此无论第一个AJAX调用是否成功,只要第二个AJAX调用发生错误,.when().always()
就会发生
对于您的场景,我知道的唯一解决方案是为每个AJAX请求保留第二个$。延迟,然后解决每个AJAX请求的始终处理程序中的问题。然后在$中使用这些延迟。当调用时:
xhr2 always
xhr1 & xhr2 always
xhr1 always
.when(…)
将在所有问题得到解决时,或在任何问题被拒绝时,触发其回调
由于第二个AJAX调用会导致错误,因此无论第一个AJAX调用是否成功,只要第二个AJAX调用发生错误,.when().always()
就会发生
对于您的场景,我知道的唯一解决方案是为每个AJAX请求保留第二个$。延迟,然后解决每个AJAX请求的始终处理程序中的问题。然后在$中使用这些延迟。当调用时:
xhr2 always
xhr1 & xhr2 always
xhr1 always
您已经在使用.when()
,只需将.then()
添加到其中,您就应该有办法等待所有响应。@DevlshOne我相信只有在两个调用都成功的情况下才会调用then()
。这是正确的。你是说即使调用失败,OP也希望得到结果吗?@DevlshOne是的,这就是他想要的。你已经在使用。当()
时,只需将。然后()
添加到其中,你应该有办法等待所有的响应。@DevlshOne我相信只有在两个调用都成功的情况下才会调用然后()
。这是正确的。你是说即使调用失败,OP也希望得到结果?@DevlshOne是的,这就是他想要的。那么,有没有办法进行同步回调?那么,有没有办法进行同步回调?
var def1 = $.Deferred();
xhr1.always(def1.resolve);
var def2 = $.Deferred();
xhr2.always(def2.resolve);
$.when(def1, def2).done(function() {
// only called when the two XHRs complete, whether
// they succeeded or not
});