在Javascript中有顺序执行语句的方法吗?

Is there a way to sequentially execute statements in Javascript?

本文关键字:方法 语句 执行 Javascript 顺序      更新时间:2023-09-26

很多时候,我不得不写一个回调函数。

示例1:myTransaction.executeSql(支撑、参数mySuccess myError);

例2:$。getScript(url [, mySuccess])

问:有没有一种方法可以告诉JavaScript,"请执行这行代码,当你完成后,执行下一行代码"?

我不想锁定浏览器会话,我只想让它不运行下一行,直到它完成。

将对第一个函数调用的第二个函数的调用放在mySuccess处理程序函数中。当第一个函数完成并运行mySuccess函数时,该函数将调用第二个函数。这就是排序异步操作的设计模式。

不能用异步操作编写正常的顺序函数调用。您必须使用补全函数来完成排序。

下面是对第一个函数使用匿名成功处理程序的示例:

myTransaction.executeSql(stmt,parameters,function() {
    $.getScript(url, mySuccess);
}, myError);

不,没有一种方法可以精确地达到你想要的。但是您可以使用一个库来帮助简化这一过程,如步骤:https://github.com/creationix/step

Step(
  function() { myTransaction.executeSql(stmt, parameters, this, myError) },
  function() { $.getScript(url, this); },
  function() { alert('done'); }
);

或者您需要手动嵌套回调。

Javascript库Step提供了一个框架,封装了@jfriend00建议的解决方案。

您可以将步骤2的调用放在步骤1的成功/完成回调中,如前所述。

或者您可以查看promise/deferred范式。它有点复杂,所以我不会在这里简明地解释它(可能会出错)。但是考虑到您似乎已经在使用jQuery,您可能可以使用它对deferred对象的实现。这里有几篇你可以阅读的文章(尽管你可以在谷歌上找到更多的文章):

http://blogs.msdn.com/b/ie/archive/2011/09/11/asynchronous-programming-in-javascript-with-promises.aspx

http://joseoncode.com/2011/09/26/a-walkthrough-jquery-deferred-and-promise/

http://www.infoq.com/articles/surviving-asynchronous-programming-in-javascript

Frame.js是另一个类似于Step的库,它雄辩地解决了这个问题,并提供了许多优于settimeout或嵌套回调的优点。