情况一
写一个 js 文件 test.js
var EventEmitter = require('events').EventEmitter
var e = new EventEmitter()
e.on('test', function(){
console.log('test')
})
然后 node test
,控制台会瞬间退出。
情况二
test2.js 里有
http.createServer(function(){
}).listen(8080)
然后运行,一直没有退出。
情况三
test3.js 里有
setTimeout(function(){
}, 3000)
然后运行,3秒后才会退出
疑问
《node.js 深入浅出》这样写道:
在进程启动时,Node便会创建一个类似于while(true)的循环,每执行一次循环体的过程我们称为Tick。每个Tick的过程就是查看是否有事件待处理,如果有,就取出事件及其相关的回调函数。如果存在关联的回调函数,就执行它们。然后进入下个循环,如果不再有事件处理,就退出进程
- 这里的“查看是否有事件待处理”,是指有事件被触发吗?如果是的话,情况二和情况三的前3秒,好像没有事件被触发,为什么可以一直维持不退出?
- 情况二和情况三的进程没有退出,是因为每个 tick 的过程都有事件待处理吗?如果有的话是什么事件呢?
4 回复