【发布时间】:2013-04-26 12:38:00
【问题描述】:
我一直在阅读nodebeginner 我遇到了以下两段代码。
第一个:
var result = database.query("SELECT * FROM hugetable");
console.log("Hello World");
第二个:
database.query("SELECT * FROM hugetable", function(rows) {
var result = rows;
});
console.log("Hello World");
我明白他们应该做什么,他们查询数据库以检索查询的答案。然后console.log('Hello world')。
第一个应该是同步代码。 第二个是异步代码。
这两部分的区别对我来说很模糊。输出会是什么?
谷歌搜索异步编程对我也没有帮助。
【问题讨论】:
-
Stage 你没有用谷歌找到任何东西,这是一个相当大的主题。在同步编程中,每一步都在前一步执行完毕后执行。在异步中,即使第 1 步未完成,也会执行第 2 步。您在第二个示例中定义的函数称为回调函数,一旦返回数据库的结果就会运行,这可能是在运行 console.log 之后。
-
@Bartdude 有很多关于异步编程的内容,但没有简单解释它是什么以及它在实践中的含义。
-
@GabrielLlamas 为什么要避免使用同步函数?
-
@CharlieParker 因为它们阻塞了事件循环,您将失去异步事件 I/O 模型的所有好处。因为这是一种不好的做法。这样想:如果你不使用异步函数,为什么要使用 Node.js?
-
@GabrielLlamas,如果我正在执行一个 INSERT 查询并且我想使用
database.query()之后最后插入的 ID,那么我应该将它称为同步,对吗?或者应该是什么方法? (这个问题我很久了)
标签: javascript node.js asynchronous synchronous