问题标签 [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 投票
6 回答
74740 浏览

javascript - 如何防止背景图像加载延迟导致页面加载时出现白色“闪烁”?

问题是,在网络上的大多数网站上,都有背景图片。他们需要时间来加载。通常,如果图像经过优化并且足够小,则不会有问题。但是,在我的一些网站上,javascript 文件会先于页面上的任何其他内容找到加载方式,即使它们位于页脚中!这会在背景图像加载之前创建一个白色“闪光”。为什么我的 javascript 会先加载?我在很多网站上都遇到了这个问题,而且我到处都能看到。这是我目前正在开发的网站:

http://www.bridgecitymedical.com/wordpress/

谢谢!

tl;dr 如何推迟在我的网站上加载 javascript,以便在其他任何内容之前加载背景图像,从而防止在浏览器完成下载图像之前出现白色“闪烁”。

0 投票
1 回答
119 浏览

jquery - 关于 jQuery.Deferred()

我正在研究 Deferred 中的一些用例,我是按照以下说明来的:

我不明白,在什么情况下我们调用reject()然后直接调用promise()

我的意思是,如果我们要拒绝被延迟的对象,被拒绝的延迟对象怎么能代表一个承诺?

0 投票
1 回答
459 浏览

jquery - jquery:当您将延迟对象传递给“then”时会发生什么?

我一直在研究 jquery deferred objects 有一段时间了,但我被一件事难住了。

“done”、“always”、“then”等方法将在解析延迟对象时应该调用的函数作为它们的参数。

但是,我尝试通过将延迟对象传递给“always”方法来链接请求,这似乎也有效:

但是,它并没有真正起作用。因为当我按照上面的代码进行操作时:

foob​​ar 似乎在某个随机时间被调用,不一定是在处理完数组中的最后一个元素之后。

什么时候使用会更好吗?

上面的代码(使用“何时”)会导致 ajax 请求一个接一个地发生,还是同时发生?

顺便说一句,我研究了用“管道”链接,但由于范围问题,我认为将“管道”与上面的 for 循环一起使用会更难。

另外,为什么原始代码“几乎可以工作”?那里发生了什么?它是否像执行函数一样执行延迟对象,当它执行时会发生什么?

0 投票
3 回答
3567 浏览

javascript - 如何将 jQuery 的延迟对象与自定义 javascript 对象一起使用?

我有一个标准的 javascript 对象,它的原型扩展了一个.start()方法,将 2 个回调作为参数:successfailure分别。此方法执行一些异步处理(它不是AJAX),并根据此处理的结果调用成功或失败回调。

以下是如何对其进行模式化:

在方法内部执行的确切处理并不重要,只是它是异步和非阻塞的。我无法控制 start 方法完成处理的时间点。我也无法控制此方法的原型和实现。

我可以控制的是successfailure回调。由我来提供它们。

现在我有一个这些对象的数组:

此数组中元素的顺序很重要。我需要.start()在数组的每个元素上连续触发该方法,但只有在前一个元素完成后(即调用成功回调)。如果发生错误(调用失败回调),我想停止执行并且不再对数组的其余元素调用 .start 方法。

我可以通过使用递归函数天真地实现这一点:

这很好用,但是看看 jQuery 1.5 中引入的jQuery 的延迟对象,我认为这段代码还有改进的空间。不幸的是,我对它还不是很舒服,我正在努力学习它。

所以我的问题是是否有可能调整我的幼稚代码并利用这个新的 API,如果是的话,你能给我一些建议吗?

这是我的实现的一个jsfiddle

0 投票
2 回答
4442 浏览

javascript - 如何从已解析的 jQuery.Deferred() 中获取价值?

这是我的基本情况:

最后一行可能有效,也可能无效,因为done在延迟对象已经解决的情况下不会触发。我希望能够做这样的事情:

如何获得已经解决的值jQuery.Deferred()

0 投票
3 回答
1174 浏览

jquery - 使用jQuery延迟管道最简洁的方法是什么?

我正在设计一个包装我的 REST API 的 javascript API。我通常希望避免大量冗长和令人困惑的嵌套回调,并且一直在阅读延迟 jQuery 的优点。

让我们想象一下我的库“myLib”,它代表人物对象和在人物对象之间遍历的方式。它有一堆方法,如“爸爸”、“老板”、“助理”等,需要执行 ajax 请求来查找一些数据并返回另一个相关的“人”对象。但我希望他们返回一个延迟对象,该对象也有 myLib 的方法,我可以将它们链接在一起,编写非常简洁的简单代码,如下所示:

这将创建一个“我”人对象,然后执行第一个 ajax 调用以查找我的详细信息,然后使用该数据进行另一个调用以查找我的父母,然后再次查找我的老板,然后另一个查找助手,然后最后将其传递给我的回调并由我处理。有点像 jQuery 的链式遍历方法,但是是异步的。

当链中的最后一个 Deferred 对象被解析时,在任何时候传入一个函数,但通常是最后一个方法,将在内部被调用。第二个函数是失败回调,如果链中的任何延迟对象被拒绝,则调用该函数。

我在想我需要创建一个 jQuery 延迟对象,然后扩展它,但不确定这是否是“最佳”方式。

那么实现我的极简 API 目标的最佳实践方式是什么?基本上我希望所有方法名称在域问题名称空间中都是 100%,并且不会被大量的“何时”、“完成”、“成功”等污染。

有没有我可以在某处模拟的类似干净 API 的例子?

0 投票
1 回答
518 浏览

jquery - Jquery-jsonp 插件和延迟对象,不延迟

我正在尝试将 jQuery-jsonp 插件与 jQuery Deferred Objects 一起使用,但到目前为止我还没有运气。

目标是调用 API、检索数据并详细说明它们。由于我使用相同的调用来检索和详细说明用于不同目的的不同数据集,因此我以这种方式构建我的代码以避免在每个详细说明函数中显式重复相同的 API 调用:

问题是,我尝试了相同的方法,用 Julian Aubourg 的插件( http://code.google.com/p/jquery-jsonp/ )中的 $.jsonp() 替换 $.getJSON( ) 但延迟不起作用。

我对此有一些限制,无法更改:

*API 调用必须使用 JSONP。

*我必须能够检测到错误(无论是哪种),因此使用 jQuery-jsonp 插件,这是我迄今为止找到的唯一解决方案。

我研究了 jQuery Deferred Object,搜索了 jQuery 论坛、Stackoverflow 和网络的深度,并阅读了插件页面上的所有内容。我尝试了几种方法,但到目前为止都没有奏效(就好像 deferred 甚至不存在一样)。我的假设是延迟不适用于 jquery-jsonp 插件,因为它的结构(这是允许它捕获错误的原因),并且因为 $.jsonp 本身不像 $.ajax 那样是延迟的,但我是绝不是专家,所以我需要这个出色社区的一些建议。

我找到的一个解决方案,它适用于我,是将一个函数作为参数传递给 callAPI 函数,因此成功后它可以执行我需要的内容,而无需重复自己。

所以我的 callAPI 函数会这样改变:

但是,由于错误管理的必要性在开发阶段很晚才出现,而我作为新手并没有早点考虑它,这意味着要重写一大堆代码。因此,如果有人设法通过 jquery-jsonp 插件使用延迟,那就太好了。

谢谢你们。

弗拉维亚

0 投票
1 回答
259 浏览

jquery - 您是否需要将 jQuery.when 与单个延迟对象一起使用?

假设您有以下代码:

在这个例子中,我只需要等待一个 deferred 被解决。在这种情况下,像上面那样编写第二个函数与像这样编写它有什么区别(如果有的话):

我的意思是,我喜欢以第一种方式编写它,因为它清楚地表明我们正在使用 jQuery 延迟对象,但我很好奇在这种情况下是否有必要。

编辑:我修复了 then() 调用中的错字。谢谢你抓住那个。

编辑:感谢nrabinowitz的回答。我认为您已经明确了我在使用 when() 与使用原始 jQuery 延迟对象实例方面不确定的要点。我再次修复了我的代码以返回一个承诺而不是整个延迟对象。这就是我现在在实际代码中的做法,只是忘记在此处添加。

0 投票
3 回答
2902 浏览

jquery - 处理延迟对象数组

由于使用$.Deferred我已经多次遇到这种情况:我有一个值列表,每个值都以某种方式产生一个延迟对象,并且我想在所有延迟对象都解决后执行回调。

一个更具体的例子是这样的:

有比我示例中的代码更优雅的解决方案吗?

0 投票
1 回答
5339 浏览

javascript - 带有可变参数的 jQuery $.when()

我想向服务器发送 [1, n) AJAX 请求,毕竟返回了结果,应该关闭模式对话框。$.when(a(), b(), c())会很完美,但我不知道如何将函数的变量计数$.when作为参数传递。任何想法如何解决这个问题?