是否可以在javascript / jquery中停止执行?

基本上我希望能够在$ .holdTillFinished()方法中包装任何命令,该方法不允许执行继续,直到指定的方法/ jquery动画执行完毕。

我怀疑这在javascript中可能很难甚至不可能,但我希望有人知道。

我不想听到如何将回调传递给动画以使其运行完整或其他任何类似的东西。

我真的想知道这样的事情是否可能以及如何去做。

如果任何人都知道一个能够排队用户定义的方法和动画的好队列插件,那就不会发生这种情况,那也很酷。 我真正想要的是一种延迟执行的方法。(同时仍然允许动画function)

我怀疑这在javascript中可能很难甚至不可能

你的怀疑是正确的。 像动画,用户输入循环和’async = true’这样的方法XMLHttpRequests 必须将控制权返回给浏览器才能继续,并且在返回每个嵌套级别的函数调用之前,浏览器无法恢复控制。 这意味着你的所有代码,包括调用’holdTillFinished()’的函数都必须展开:因此’holdTillFinished()’是不可能的。

其他语言具有流量控制function,允许您有效地执行异步过程,使调度程序看起来是同步的,反之亦然。 最着名的是线程和延续 。 JavaScript没有这些function,所以你能做的最好的就是超时和回调。

(将回调定义为内联函数以获取对闭包函数在闭包中的变量的访问权限至少会带来一些痛苦;其他一些语言必须开始将对象属性中的每个封闭状态包装起来以实现此目的。)

您可能正在寻找http://docs.jquery.com/Effects/queue

但是,如果你正在寻找一种更普遍的延迟方式,我之前已经使用过这个片段(我没有写过它,所以所有的归功于原作者):

//Simple wrapper enabling setTimout within chained functions. $.fn.wait = function(time, type) { time = time || 1000; type = type || "fx"; return this.queue(type, function() { var self = this; setTimeout(function() { $(self).dequeue(); }, time); }); }; 

您可以使用发布/订阅体系结构来实现您想要的function。 我不知道你想要达到的目标,我猜这对你有用。

这种方式的工作方式是,您将函数的完成视为一个事件,您可以监听并附加处理程序。 Dojo有一个pubsub机制 ,但我确信还有其他机制。

它根据情况进行防御,但通常需要显示在调用AJAX或在javascript中执行任何循环时要显示的处理图像。 我有一种情况,我在循环中调用AJAX,以便用户显示处理图像。 终止我做了一个技巧。 调用此函数时,我放置了一个按钮来取消作业我设置了一个全局变量,将’cancelJob’设置为true,并在循环中检查此全局,如果这是真的,则运行返回false并且脚本将停止。

 var cancelJob = false; foreach(){ if(cancelJob == true) return false; } function cancelButtonPress(){ cancelJob = true; }