等待多个jQuery Deferred的第一个被解决? [英] Wait for the first of multiple jQuery Deferreds to be resolved?

查看:91
本文介绍了等待多个jQuery Deferred的第一个被解决?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用jQuery,我知道我可以使用$.when()等待所有乘法Deferred被解决. (或者第一个被拒绝.)

With jQuery I know that I can use $.when() to wait for all of multipe Deferreds to be resolved. (Or for the first one to be rejected.)

但是有没有一种简单的方法可以触发多个Deferred,然后等待第一个得到解决?

But is there a simple way to fire of multiple Deferreds 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆