使用jQuery我知道,我可以用$.when()
等待所有 multipe 的 Deferred
s到解决。 (或者第一个被拒绝。)
但有一个简单的方法来火多的Deferred
秒,然后静静等待第一个有待解决?
比如我想尝试用两个类似的AJAX Web服务无论是或可能是向下或慢,然后处理哪一个回复第一。 然后,我可能会使用第三Deferred
超时。
使用jQuery我知道,我可以用$.when()
等待所有 multipe 的 Deferred
s到解决。 (或者第一个被拒绝。)
但有一个简单的方法来火多的Deferred
秒,然后静静等待第一个有待解决?
比如我想尝试用两个类似的AJAX Web服务无论是或可能是向下或慢,然后处理哪一个回复第一。 然后,我可能会使用第三Deferred
超时。
基于凯文·B的代码,这是一个使用一个主递延对象的方法:
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(...)
或.rejectWith(...)
酌情连同masterDeferred
一般形式的回调:
masterDeferred.then( doneCallbacks, failCallbacks );
一个快速简便的方法是放弃其他请求有两种颜色的时候之一,但你也可以检查推迟的状态,它的语法取决于你的jQuery版本,这就是为什么我和中止去了。
function doStuff(data) {
alert( "Hello World!" );
}
var reqOne = $.post("foo.php"),
reqTwo = $.post("bar.php");
reqOne.done(function(data){
reqTwo.abort();
finished = true;
doStuff(data);
});
reqTwo.done(function(data){
reqOne.abort();
finished = true;
doStuff(data);
});