我想问一下是什么让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中,允许在数据库查询完成之前执行“下一行”语句。
答案 0 :(得分:0)
说到Javascript,sync vs async更多的是设计模式,而不是函数本身的属性。同步函数将通过其返回值提供其结果,而异步函数不会返回任何重要值,而是通过在这些值可用时调用回调来提供结果。
不同之处在于,如果函数需要等待一些系统IO(如数据库查询),则函数的同步版本将需要暂停Javascript执行,直到数据库响应(因此您可以返回查询结果)一旦发送查询,异步版本将立即返回并恢复Javascript执行,并安排在这些结果返回时调用回调。
答案 1 :(得分:0)
我假设通过不提供回调,该函数使该位节点具体地以同步方式运行。
由于它必须生成一个新线程来连接数据库,在第一个没有提供回调的例子中,该函数将等待该线程在返回结果集之前完成它。
在第二个例子中,它将生成线程并返回,并使用node / js的任何线程/事件管理方法,在线程完成后立即调用回调。
所以我猜一个简单的答案:
线程并选择(作为程序员)是否在继续之前等待线程完成。