【发布时间】:2018-10-07 14:22:42
【问题描述】:
我的目标是了解使它们异步的某些 JavaScript 函数究竟是什么。你可以有这样的功能:
function someRandomFunction () {
for (let i of everything) {
iterator++
something = true
hello = that + whatever
}
}
这个函数没有什么是异步的。它做了很多事情,但速度很快。
然后采用这样的 Node.js 函数:
fs.readFile('path/to/file', (err, data) => {
// do something
})
这个函数被声明为异步的。但这是为什么呢?背后的原因是什么?
是不是因为读取文件需要一定的时间才能完成,所以它是异步的?为什么在循环一些变量和做一些计算时是异步的不是异步的?
【问题讨论】:
-
你有没有遇到过这个讨论函数的线程? stackoverflow.com/questions/10058814/get-data-from-fs-readfile
-
所以,在不劫持下面很好的答案的情况下,我想补充一下:同步代码 = 我组装了一个披萨,把它放进烤箱,看着烤箱 20 分钟,披萨慢慢煮熟,然后吃了我的披萨。异步代码 = 我组装了比萨,把它放进烤箱,20 分钟去做别的事情,然后 20 分钟后比萨煮熟了。 Async 真的可以归结为“我不知道这段代码什么时候完成,我也没有直接的控制权。让我知道什么时候完成。”需要注意的是——代码可以很快。
-
Javascript 是单线程运行时,一次只能运行一件事。在 Node(和浏览器)中,异步操作被委托给事件循环,而同步操作则保留在堆栈上。看看这个 YouTube 视频,它可以帮助你了解发生了什么:Philip Roberts: What the heck is the event loop anyway?
标签: javascript node.js asynchronous