什么机制使javascript异步?

时间:2014-06-20 21:02:54

标签: javascript asynchronous

我想问一下是什么让javascript函数异步。

此问题类似于提出的问题here

//example 1
var result = database.query("SELECT * FROM hugetable");
console.log("query finished");
console.log("Next line");


//example 2
database.query("SELECT * FROM hugetable", function(rows) {
    console.log("query finished");
});
console.log("Next line");

输出将是:

Example 1
    query finished
    Next line

Example 2  
    Next line    
    query finished

我没有看到为什么示例1为同步的原因(机制),但示例2是异步的。换句话说,两个示例都具有相同的查询语句,为什么示例1中的console.log语句必须等待查询在执行之前完成。但是在示例2中,允许在数据库查询完成之前执行“下一行”语句。

2 个答案:

答案 0 :(得分:0)

说到Javascript,sync vs async更多的是设计模式,而不是函数本身的属性。同步函数将通过其返回值提供其结果,而异步函数不会返回任何重要值,而是通过在这些值可用时调用回调来提供结果。

不同之处在于,如果函数需要等待一些系统IO(如数据库查询),则函数的同步版本将需要暂停Javascript执行,直到数据库响应(因此您可以返回查询结果)一旦发送查询,异步版本将立即返回并恢复Javascript执行,并安排在这些结果返回时调用回调。

答案 1 :(得分:0)

我假设通过不提供回调,该函数使该位节点具体地以同步方式运行。

由于它必须生成一个新线程来连接数据库,在第一个没有提供回调的例子中,该函数将等待该线程在返回结果集之前完成它。

在第二个例子中,它将生成线程并返回,并使用node / js的任何线程/事件管理方法,在线程完成后立即调用回调。

所以我猜一个简单的答案:

线程并选择(作为程序员)是否在继续之前等待线程完成。