【问题标题】:firing query / javascript functions in the right order以正确的顺序触发查询/javascript函数
【发布时间】:2012-05-16 14:03:14
【问题描述】:

这是一个简单的问题,但我只看到用复杂的具体示例回答过这个问题。

我想依次运行三个函数,一个在前一个完成之后。

f1();
f2();
f3();

我真的很难用 javascript(/jquery) 做?!即使我将 f1 定义为:

function f1(){
f1s normal code;
f2();
}

它仍然会在 f1 完成工作之前启动 f2。我试过 .whens 和 .done 或 .thens。我尝试制作回调函数并取得了一些成功。但如果有人能清楚地回答这个简单的例子,那对我理解会有很大帮助。 提前致谢!

【问题讨论】:

  • 不会....js 没有并行编程。
  • 除非它们做异步操作,否则它们将按顺序运行。即使它们执行异步操作,它们也会按顺序运行,只是看起来可能不像。
  • 我建议,因为 JavaScript 是单线程的,它应该(据我所知)通过函数线性工作,因为它们是在文档/脚本中找到/解析。所以它当然应该在'完成'f1()之前执行f2()
  • 如果他们正在做一些异步的事情,异步调用应该有一个回调函数,当它完成时触发。
  • @JamesAllardice。措辞好!

标签: javascript jquery function


【解决方案1】:

只要这3个方法的主体中没有异步代码运行,它们将始终按顺序运行。如果您有异步代码(即 ajax 调用),那么您将需要使用回调方法。

【讨论】:

  • 谢谢(大家)。它们确实包括一些 ajax 调用,它们还包括一些动画(我认为它们也可以在另一个线程上运行......??)所以我可能会清理我的代码以使用这些回调函数。我想有回调的函数有它们是有原因的,比如 .animate 和 .post ...再次感谢。我会 +1 你,但显然我缺乏声誉!
【解决方案2】:

您需要使用回调,也许这有帮助?

http://jsfiddle.net/2heHs/

另请看:https://github.com/leesherwood/jquery-function-stack

这是我在 github 上发现的。它并不是真正打算供所有人使用,因为我主要需要它用于私人项目。但是,如果您能理解它,那么请随意使用它。当我有时间的时候,我会让它变得更干净并添加更多的东西。当然你需要使用jquery才能使用它。

【讨论】:

    【解决方案3】:

    javascript本质上是单线程和顺序的。解决这个问题的唯一方法是 ajax 和 html5 工作者。

    话虽如此,如果您想按顺序运行三个单独的函数,javascript 天生就是这样做的:

    var func1 = function () {
        console.log('func1 ran');
    };
    var func2 = function () {
        console.log('func2 ran');
    };
    var func3 = function () {
        console.log('func3 ran');
    };
    
    // run them in order
    func1();
    func2();
    func3();
    

    http://jsfiddle.net/jbabey/cxxLY/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多