jquery同步函数

有没有办法在另一个函数完成后运行一个函数? 例如:

doSomething(); doSomethingElse(); 

我只想在doSomething完成后运行doSomethingElse()。 这可能吗?

如果doSomething()函数异步执行某些操作(例如发出Ajax请求),那么您将需要使doSomethingElse()成为该异步请求的回调,而不是在doSomething()返回后立即执行。

实际上你可以用jQuery做你想做的事(至少在某种意义上)。 它可以被认为有点hacky但工作完美无瑕。

只需在页面中包含一个您不用于其他任何内容的元素。 比如某个空的div。

 

然后将JS包含在您的函数中+由我编写的runMe函数中。

 function doSomething() { alert("First"); } function doSomethingElse() { alert("Second"); } function doSomethingElseThree() { alert("Third"); } function runMe(fn, selec) { return function() { fn(); setTimeout(function() { $(selec).dequeue("syncFnQueue"); }, 1000); } }; var selector = "#syncFnHolder"; //add three functions to a queue $(selector).queue("syncFnQueue", runMe(doSomething, selector)); $(selector).queue("syncFnQueue", runMe(doSomethingElse, selector)); $(selector).queue("syncFnQueue", runMe(doSomethingElseThree, selector)); //start first function in queue (FIFO) others are triggered automatically $(selector).dequeue("syncFnQueue"); 

这将产生三个警报,它们之间的距离为1秒,表示“第一”,“第二”,“第三”。

如果你没有延迟,请删除setTimeout,然后将调用留给$(selec).dequeue("syncFnQueue");

如果您的函数需要参数,例如doSomething(x,y,z) ,则需要调整runMe函数以使其更好,并以不同方式构造返回的函数。 点击此处或发布新问题。

javascript偏

你可能想要这样做….

 function doSomething(callback) { // code for do some thing // now fire off the callback if (typeof callback === 'function') { callback(); } } function doSomethingElse() { } doSomething(doSomethingElse); 

问题有点模糊。

如果你的函数有异步位,那么使用回调。 这就是它们的用途。

但是,如果您想在JavaScript中进行面向方面的编程,请查看jQuery-aop 。

没有办法明确地强制执行此操作,但一个想法是让doSomething()返回doSomethingElse()接受的值作为参数:

  retval = doSomething(); doSomethingElse(retval); 

这样至少你可以阻止某人调用doSomethingElse()而不至少提供它需要的参数……当然,他们是否从调用doSomething()获得该参数是另一个问题。 但这是一个开始。

想法从代码完成中解脱出来。