问题标签 [jquery-deferred]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
98218 浏览

jquery - jQuery.when 理解

我正在尝试使用jQuery.when来触发两个ajax请求,然后在两个请求完成后调用某个函数。这是我的代码:

但是,这并没有按预期工作。Ajax 调用method1将返回要使用的数据,showData()Ajax 调用method2将返回计数,该计数将分配给 var count 并稍后用于showData().

但是当我触发上面的代码时,method1会被调用,然后method2showData数据保留showData'undefined'. 我如何才能实现这一点$.when,据我所知,只有在执行两个返回$.promise的函数时才会进行。我希望应该并行调用两个 ajax 调用,并根据两个调用的结果显示以后的结果。

0 投票
3 回答
3854 浏览

javascript - 如何在 jquery 1.5 中管理 ajax 请求队列?

我一直在 jquery 1.5 中测试新的延迟 AJAX 函数,并且对它们的简单性和功能印象深刻。我有一个更大的问题与将这些请求排队的最佳方式有关。

我有两种情况:串行和并行,如果你愿意的话。我想避免使用同步/异步术语,因为我确实希望所有这些都是异步请求,以便用户可以在等待队列处理时执行其他操作。然后,我想在队列完成处理后调用单个函数。

在有两个请求的“串行模式”中,我希望它们按如下方式处理:

RequestA -> ResponseA -> RequestB -> ResponseB -> EndOfQueue

在有两个请求的“并行模式”中,我想要这个结果:

RequestA -> RequestB (ResponseA, ResponseB 准备就绪时处理) -> EndOfQueue

在任何一种情况下,如果任何请求失败,我都希望队列停止并将控制权传递给失败函数。

我有指定动态队列长度的要求,所以我认为我不能将一堆 .then() 或 .when() 延迟串在一起,因为我不知道它是一个还是一百个项目. 我正在通过供应商的 API 在服务器上执行业务逻辑,因此服务器端批处理将很困难,因为我无法控制该代码。

我已经构建了执行“并行”案例并在所有成功完成后调用 when() 函数的测试用例,但是这些测试在队列长度上不是动态的,并且不能移植到串行模型。

我可以看到如何创建一个自定义队列对象来处理这个问题,但似乎所有部分都已经在 jquery (?) 中为我编写了。我看过,但没有找到以这种方式涵盖顺序请求的示例。

关于如何使用 jquery 队列/延迟功能处理此问题的任何想法?

0 投票
2 回答
701 浏览

jquery - Jquery .when() 和 .then() 不工作?

我尝试了以下方法:

当http://api.jquery.com/jQuery.when/ Chrome 控制台上的文档 说 Uncaught type error: has no method when

@@''

0 投票
2 回答
3137 浏览

javascript - 如何正确使用 $.deferred 和不可观察的函数?

例如,假设我有两个函数,其中包含随机代码,并且基于用户的系统(慢速、中速或快速),无法判断这两个函数需要多长时间才能完成,所以setTimeout使用function2 完成后才尝试射击时不实用function1

无论时间要求如何,并且考虑到这两个函数都是 100% 非 jQuery 函数,其中没有 jQuery 代码,因此 jQuery 完全无法观察到,你如何才能使用jQuery.deferred它来function2触发?最多,这些函数可能包括没有时间关联的 jQuery 方法,并且在旧计算机上运行速度较慢。 function1.css()

我如何确保它不会像我这样称呼它们function2的同时执行:function1

使用$.deferred?除了那些关于的任何其他答案$.deferred也欢迎!

3 月 20 日添加: 如果 function1() 是一个 lambda 函数,根据用户输入,该函数可能有也可能没有异步调用,并且无法判断该函数将执行多少操作?这将是一个函数,您不知道接下来会发生什么,但无论如何,您仍然希望 function2 仅在 lambda 函数 (function1) 的所有内容完成执行,无论如何需要很长时间,但只要异步方面完成即可。如何做到这一点?

3 月 22 日添加: 所以我想,做我所要求的唯一方法是将匿名函数作为回调传递给异步函数,这些函数在完成后执行回调,或者创建事件侦听器,当事件最终被触发。

实际上没有任何方法可以仅在两条单独的行上执行异步调用并让它们按顺序触发,而无需在包含所述函数的框架内手动构建机制(事件处理程序)来处理其操作的实际执行。

这些类型的机制的一个很好的例子是 jQuery 的.queue()方法和$.Defferred对象。

.queue()下面的答案以及在ing 和 using上阅读 jQuery 的 API$.Deferred有助于澄清这一点。

Tgr 在下面给出了一个很好的示例,说明如何使用 jQuery 的$.Deferred对象创建自定义可链接函数,自定义函数本身不一定必须在其中包含任何 jQuery 代码,这正是我所寻找的。

0 投票
1 回答
1058 浏览

javascript - AJAX JQuery 延迟回调只被调用一次

我正在一些 jquery ajax 对象上注册回调。

所以我有:

稍后再回电 - 其他地方

这个回调和所有其他回调在我第一次开始时完美运行

直接连接到 g_userXHR 的 .success 每次都会被调用,但是附加在函数之外的其他回调仅在我第一次调用 main_getLogin() 时被触发;

另外,有没有办法声明一个ajax对象,以后再发送。像 g_userXHR.send();

谢谢

0 投票
11 回答
303857 浏览

jquery - jQuery 延迟和承诺 - .then() 与 .done()

我一直在阅读有关 jQuery 延迟和承诺的信息,但我看不出使用.then()&.done()成功回调之间的区别。我知道Eric Hynds提到了这一点.done().success()映射到相同的功能,但我猜也是如此,.then()因为所有回调都是在成功操作完成时调用的。

谁能告诉我正确的用法?

0 投票
3 回答
3713 浏览

jquery - 如何将回调附加到附加到延迟对象的延迟对象?

我有一个支持一系列级联下拉选择列表的 ajax 请求链。当您在第一个下拉列表中选择一个值时,会触发一个请求以填充第二个,当完成(并且下拉填充)时,下一个请求会触发以填充第三个下拉列表,依此类推。

这些请求链的形成方式有一些变化,所以我希望使用 jQuery Deferred 对象来组装请求。

我知道如何将第二个请求链接到第一个请求,但我看不到如何将第三个请求链接到第二个请求。

意图是当Step2被解析时触发Step3,但返回的延迟对象.then(Step2)来自Step1,所以Step3作为回调添加到Step1。

如果您看到这个 jsFiddle 示例,我认为我想做什么会更清楚。 编辑是相同的脚本,在第二次调用中添加了延迟以使其更加明显。

0 投票
4 回答
25370 浏览

javascript - jQuery Deferred、$.when() 和 fail() 回调参数

$.when()当其中一个延迟操作不成功时使用时,我得到了意想不到的结果。

以这个 JavaScript 为例,它创建了 2 个延迟。第一个成功,第二个失败。

自己运行:http: //jsfiddle.net/r2d3j/2/

我明白了fail! f1, f2: ["456 from f2", null]

问题是在.fail()回调中,与f2()拒绝一起传递的值被路由到第一个参数,我期望f1Value. 这意味着我真的没有办法知道哪个延迟对象实际发布了那个reject(),我也不知道故障数据实际上属于哪个操作。

我本来希望这.fail()会引起争论null, '456 from f2',因为第一个 deferred 没有失败。或者我只是没有在这里做正确的延期?

如果不遵守回调中的参数顺序,我如何知道哪些延迟失败,哪些拒绝参数属于哪个失败的延迟?

0 投票
3 回答
921 浏览

jquery - 用单子咒语召唤 JQuery Deferred

受到在 javascript 中使用 Promises 的这个(优秀)讨论的启发,我试图弄清楚如何使用 Deferred 将异步和非异步函数链接在一起,以避免在使用我的“全局存储”代码时支付回调税。

我有几个与此相关的问题,但我会在这里一起问,因为上下文是相同的。

我无法解决的一件事是如何从非异步的东西中创建一个 deferred - 也就是说,我如何获取一个值,将其包装在一个 Promise 中,然后直接返回它?( a -> M<a>)

另外,我怎样才能获取一个异步函数并将其包装,以便它直接返回其结果,但包装在一个承诺中?( (a -> b) -> (a -> M<b>))

最后一个问题,对于 monadic 怪胎 - 这个函数有标准名称吗?[a] -> (a -> M<b>) -> M<[b]>

0 投票
3 回答
4940 浏览

jquery - 解决所有延迟对象后,提高 jquery deferred.then()

我有两个 javascript 函数,save()并且saveAll(),设置如下:

我有兴趣进行修改saveAll(),以便它利用 jquery 延迟对象,并在所有操作完成后引发callback函数。save()但是,我不确定确切的语法……特别是与 $.when() 中的 $.each() 相关。会是这样吗?