是什么让 JavaScript 函数异步?

Jak*_*son 2 javascript asynchronous node.js

我的目标是了解某些 JavaScript 函数到底是什么使它们成为异步的。你可以有这样的函数:

function someRandomFunction () {
  for (let i of everything) {
    iterator++
    something = true
    hello = that + whatever
  }
}
Run Code Online (Sandbox Code Playgroud)

这个函数没有什么是异步的。它可以做很多事情,但是做起来非常快。

然后采用如下 Node.js 函数:

fs.readFile('path/to/file', (err, data) => {
  // do something
})
Run Code Online (Sandbox Code Playgroud)

该函数被声明为异步的。但为什么会这样呢?其背后的原因是什么?

是否因为读取文件需要一定的时间才能完成,因此它是异步的?为什么循环某些变量并进行某些计算不是异步时是异步的?

Ran*_*urn 5

异步的“想法”意味着“我们已经放弃了对其他一些操作代码的控制,并且我们不知道其他代码何时允许我们再次操作”。

因此,在底部示例中,您可以控制节点的文件系统操作来读取文件。我们不知道该文件有多大,因此无法预测完成需要多长时间。因此 JavaScript 允许我们提供一个“回调”,当异步操作完成时会触发该“回调”。当执行回调时,控制权返回到我们的代码。

上面的示例是同步的,因为您的代码保持对操作的控制,而 Javascript 本质上同步执行代码。

  • 当然,这就是我所描述的 JS 的同步本质。我想,为了不那么迂腐,我会冒犯那些知识渊博的人。对不起,贝尔吉。 (2认同)