例如,假设我有两个函数,其中包含随机代码,并且基于用户的系统(慢速、中速或快速),无法判断这两个函数需要多长时间才能完成,所以setTimeout
使用function2
仅在 完成后才尝试射击时不实用function1
。
无论时间要求如何,并且考虑到这两个函数都是 100% 非 jQuery 函数,其中没有 jQuery 代码,因此 jQuery 完全无法观察到,你如何才能使用jQuery.deferred
它来function2
触发?最多,这些函数可能包括没有时间关联的 jQuery 方法,并且在旧计算机上运行速度较慢。 function1
.css()
我如何确保它不会像我这样称呼它们function2
的同时执行:function1
function1(); function2();
使用$.deferred
?除了那些关于的任何其他答案$.deferred
也欢迎!
3 月 20 日添加: 如果 function1() 是一个 lambda 函数,根据用户输入,该函数可能有也可能没有异步调用,并且无法判断该函数将执行多少操作?这将是一个函数,您不知道接下来会发生什么,但无论如何,您仍然希望 function2 仅在 lambda 函数 (function1) 的所有内容完成后执行,无论如何需要很长时间,但只要异步方面完成即可。如何做到这一点?
3 月 22 日添加: 所以我想,做我所要求的唯一方法是将匿名函数作为回调传递给异步函数,这些函数在完成后执行回调,或者创建事件侦听器,当事件最终被触发。
实际上没有任何方法可以仅在两条单独的行上执行异步调用并让它们按顺序触发,而无需在包含所述函数的框架内手动构建机制(事件处理程序)来处理其操作的实际执行。
这些类型的机制的一个很好的例子是 jQuery 的.queue()
方法和$.Defferred
对象。
.queue()
下面的答案以及在ing 和 using上阅读 jQuery 的 API$.Deferred
有助于澄清这一点。
Tgr 在下面给出了一个很好的示例,说明如何使用 jQuery 的$.Deferred
对象创建自定义可链接函数,自定义函数本身不一定必须在其中包含任何 jQuery 代码,这正是我所寻找的。