强制顺序javascript执行的替代方法

时间:2014-07-09 09:55:49

标签: javascript

我正在寻找一种在JavaScript中执行多个函数的方法,并强制它们按顺序运行。实现这一目标最直接的方法是使用回调函数(这是本论坛和其他地方最常见的建议)。回调函数的问题在于,生成的代码很容易变得难以读取,因为结果可能是很多嵌套的回调函数。 我想知道以下代码是否也将按顺序执行:

function doSomeThingOne(){
 //do something intense here that takes quite some processor time
 void(0); //dummy statement for illustration purposes only
 return true;
}

function doSomeThingTwo(){
 //do something intense here that takes quite some processor time
 void(0); //dummy statement for illustration purposes only
 return true;
}

function testSequentialExecution(){
 //a temporary variable just to capture the 
 var bolTemp=false;

 //execute the first function
 bolTemp=doSomeThingOne();

 //after this is done, execute the second function
 bolTemp=doSomeThingTwo();
}

//kick off the (hopefully) sequential execution
testSequentialExecution();

我在寻找一个简单的JavaScript解决方案。 如果我的函数doSomeThingOne()和doSomeThingTwo()不执行同步运行的代码(如典型的AJAX请求),这种编码风格会强制函数同步执行吗?

1 个答案:

答案 0 :(得分:2)

是的,当然。这与JavaScript不会改变任何其他函数的内容的方式相同 - 函数中的表达式将始终按顺序执行。具体来说,代码块内的所有表达式({}之间的某些表达式)将始终按顺序执行。函数体就是这样的代码块。

表达式可能具有异步副作用(如调用setTimeout()或进行AJAX调用),但表达式本身按顺序进行计算。浏览器可以确定保留对表达式的一部分的引用并在以后执行这些部分。

你的问题似乎是你在异步世界中花了太多时间; - )

主要问题通常是你做异步的事情。然后,函数结束并最终调用回调函数。没有好的方法来序列化它。也许JavaScript promises会有所帮助。