-
Notifications
You must be signed in to change notification settings - Fork 52
异步函数进入到事件队列的时机
LYF edited this page Jun 29, 2016
·
4 revisions
进入时机是:过了指定的时间,由 事件触发线程 放入事件队列
进入时机是:触发时,由 事件触发线程 放入事件队列
关于setTimeout的入队时机,MDN上说的很清楚:
在浏览器里,当一个事件出现且有一个事件监听器被绑定时,消息会被随时添加。如果没有事件监听器,事件会丢失。所以点击一个附带点击事件处理函数的元素会添加一个消息。其它事件亦然。 调用 setTimeout 函数会在一个时间段过去后在队列中添加一个消息。这个时间段作为函数的第二个参数被传入。如果队列中没有其它消息,消息会被马上处理。但是,如果有其它消息,setTimeout 消息必须等待其它消息处理完。因此第二个参数仅仅表示最少的时间 而非确切的时间。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/EventLoop
其次是node文档关于EventEmiter的说明:
Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。 Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, 一个fs.readStream对象会在文件被打开的时候发出一个事件。 所有这些产生事件的对象都是 events.EventEmitter 的实例。
http://www.runoob.com/nodejs/nodejs-event.html
### 注意事项
在《JavaScript异步编程》这本书中,关于setTimeout的入队时机的说明是错误的(1.1.3 队列):
调用setTimeout的时候,会有一个延时事件排入队列