等待多个jQuery Deferred的第一个被解决? [英] Wait for the first of multiple jQuery Deferreds to be resolved?
问题描述
使用jQuery,我知道我可以使用$.when()
等待所有乘法Deferred
被解决. (或者第一个被拒绝.)
With jQuery I know that I can use $.when()
to wait for all of multipe Deferred
s to be resolved. (Or for the first one to be rejected.)
但是有没有一种简单的方法可以触发多个Deferred
,然后等待第一个得到解决?
But is there a simple way to fire of multiple Deferred
s and then just wait for the first one to be resolved?
例如,我想尝试使用两个类似的AJAX Web服务,或者它们可能宕机或运行缓慢,然后再处理其中一个首先答复的内容.然后我可能会使用第三个Deferred
进行超时.
For instance I want to try to use two similar AJAX web services either or which might be down or slow and then process whichever one replies first. And then I might use a third Deferred
for a timeout.
推荐答案
基于凯文B的代码,以下是一种使用主Deferred对象的方法:
Based on Kevin B's code, here's an approach that uses a master Deferred object:
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的最简单形式是:
I think I'm right in saying that the simplest form of resolving the masterDeferred would be :
reqOne.done(masterDeferred.resolve);
reqTwo.done(masterDeferred.resolve);
但是单独的完成函数将允许您在内部分支并酌情调用.resolve()
,.reject()
,.resolveWith(...)
或.rejectWith(...)
,以及一般形式的masterDeferred
回调:
But separate done functions will allow you to branch internally and call .resolve()
, .reject()
, .resolveWith(...)
or .rejectWith(...)
as appropriate, together with masterDeferred
callbacks of the general form :
masterDeferred.then( doneCallbacks, failCallbacks );
这篇关于等待多个jQuery Deferred的第一个被解决?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!