等待多个 jQuery Deferreds 中的第一个被解析?

2024-02-19

通过 jQuery,我知道我可以使用$.when()等待all of多重Deferred待解决。 (或者第一个被拒绝的。)

但是有没有一种简单的方法可以同时触发多个Deferreds 然后等待第一个待解决?

例如,我想尝试使用两个类似的 AJAX Web 服务,或者使用两个类似的 AJAX Web 服务,或者它们可能会关闭或变慢,然后处理第一个回复的一个。然后我可能会使用第三个Deferred超时。


基于 Kevin B 的代码,以下是使用主 Deferred 对象的方法:

var masterDeferred = new $.Deferred(),
    reqOne = $.post("foo.php"),
    reqTwo = $.post("bar.php");

masterDeferred.done(function() {
    // do stuff
});

reqOne.done(function() {
    masterDeferred.resolve();
});
reqTwo.done(function() {
    masterDeferred.resolve();
});

我认为我的说法是正确的,解决 masterDeferred 的最简单形式是:

reqOne.done(masterDeferred.resolve);
reqTwo.done(masterDeferred.resolve);

但是单独的完成函数将允许您在内部分支并调用.resolve(), .reject(), .resolveWith(...) or .rejectWith(...)酌情连同masterDeferred一般形式的回调:

masterDeferred.then( doneCallbacks, failCallbacks );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

等待多个 jQuery Deferreds 中的第一个被解析? 的相关文章

随机推荐