在Javascript中有顺序执行语句的方法吗?
Is there a way to sequentially execute statements in Javascript?
很多时候,我不得不写一个回调函数。
问:有没有一种方法可以告诉JavaScript,"请执行这行代码,当你完成后,执行下一行代码"?示例1:myTransaction.executeSql(支撑、参数mySuccess myError);
例2:$。getScript(url [, mySuccess])
我不想锁定浏览器会话,我只想让它不运行下一行,直到它完成。
将对第一个函数调用的第二个函数的调用放在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
对象的实现。这里有几篇你可以阅读的文章(尽管你可以在谷歌上找到更多的文章):
Frame.js是另一个类似于Step的库,它雄辩地解决了这个问题,并提供了许多优于settimeout或嵌套回调的优点。
相关文章:
- 编写if-else语句的更好方法
- jQuery 在自定义方法中使用 if 语句进行验证
- 通过找到一种删除许多 if 语句的方法来简化代码
- JS定义的方法仅在语句的一部分中等于NaN
- 比使用大量其他 if 语句更有效的方法
- 在JavaScript / jQuery中,是否有一种更短的方法可以编写在同一个测试变量上具有许多OR的“if”语句
- 什么'这是一种基于if/if-else语句显示popover的简单方法
- 动态更改测试中代码覆盖率的require语句的更好方法
- 在条件(if)结构的条件语句中是否有定义变量的有效方法
- 如何在jquery方法中创建一个if语句
- JavaScript 将循环遍历数组的函数传递给使用 Switch 语句日期方法的函数
- ng-单击中方法的 if 语句
- 在Javascript中,有没有一种方法可以用一个语句创建一个索引对象数组
- 从 JavaScript 调用的小程序方法中的 return 语句
- 编写 if 语句的新方法
- 检查布尔键是否存在并将其包含在 if 语句中的最有效方法
- 提供具有多个参数的存储语句的最佳方法
- 如何在strongloop的远程方法中执行MongoDB语句
- 如何更改“动物”的原型并添加方法“sayName”来打印语句
- 如何在 JavaScript 中管理 100 个 else if 语句?更好的方法