通过 jQuery,我知道我可以使用$.when()
等待all of多重Deferred
待解决。 (或者第一个被拒绝的。)
但是有没有一种简单的方法可以同时触发多个Deferred
s 然后等待第一个待解决?
例如,我想尝试使用两个类似的 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(使用前将#替换为@)