当前位置: 首页 > 面试题库 >

jQuery Deferred没有按顺序调用resolve / done回调

越霖
2023-03-14
问题内容

代码示例:http :
//jsfiddle.net/MhEPw/1/

我有两个jQuery Deferred对象。

我希望发生多个“异步”请求-在它们全部运行之后,我希望按指定的顺序运行回调(.done函数)。不幸的是,它们没有按顺序运行。

也许我在这里寻找Deferred无法提供的某些功能?


问题答案:

您需要做的是将您的所有请求链接到一个主延迟对象,并根据其承诺注册所有回调。延迟的主对象将需要侦听各个请求并相应地解决。实现此目的的最简单方法是预先定义所有延迟的对象,以避免出现鸡肉和鸡蛋问题:

var d1 = $.Deferred();
var d2 = $.Deferred();
var def = $.when(d1, d2);

def.done(function() {
    alert(1);
});
setTimeout(function() {
    d1.resolve();
}, 3000);

def.done(function() {
    alert(2);
});
setTimeout(function() {
    d2.resolve();
}, 1000);

小提琴:http://jsfiddle.net/pVVad/

更改延迟对象定义的顺序是可能的,但这会使示例更加复杂。



 类似资料:
  • 我有一个object的数组,我希望循环访问该数组并为每个元素调用服务,但对于每个元素,我希望只有当当前调用成功时才调用下一个元素,除非阻塞其余的。 有没有在序列模式下调用可观察到的数据而不是并行的?

  • 我正在开发一些关于guvnor插件的规则。e、 g.检查 这个人就是老师。 老师是男性。 男教师为45岁或以上。 我把这三条规则分开处理。但现在我想按顺序调用它们。 比如这个人是老师。插入新的事实男性教师。然后在下一个规则中,在收到的事实中填充教师的年龄。然后检查教师的年龄。 那么我如何在drools-guvnor插件中实现这一点。 我在drools-guvnor5.5插件jboss中使用引导编辑

  • 问题内容: 我想以这种方式进行Ajax调用的堆栈:call(n-1)完成后,call(n)开始… 由于多种原因,我无法使用 async:false : 一些请求可能是 jsonp (最相关) 我还有其他一些可能同时起作用的ajax请求。 浏览器被阻止 我无法以这种方式链接我的请求: 因为请求的数量和参数是根据用户输入动态创建的。 一个小例子说明了我的问题。 您将看到服务器响应顺序是随机的,我要实现

  • Azure功能: 以下是日志记录的摘录。如您所见,有不同的线程。例如,“消息19”位于“消息10”之前。是的,我确信我把消息放在队列中的顺序是正确的。

  • 问题内容: 在护照[配置身份验证]文档中,它具有看上去很吓人的功能,该功能使用了神秘功能“完成”。 现在,在快速文档中,有许多方法可以传递称为next的方法。 这是快递和护照这两个框架之间的区别吗?还是他们在做两件事? 问题答案: 这是快递和护照这两个框架之间的区别吗? 不,它们的用途不同。Express用作node.js上的应用程序框架,其中护照仅处理Web应用程序的身份验证部分。 关于next