node中的事件循环
发布于 2 年前 作者 submerge 1751 次浏览 来自 问答

对node的事件循环总是一知半解。代码在单线程的环境下执行,每当代码遇到异步操作,比如IO,setTimeout等,就往队列里push一个事件,下一次事件循环从事件队列中取出一个事件执行其callback,知道事件队列为空,退出。

假如说有一下情况

setTimeout(function( console.log(‘timeout callback’) ) {},3000)

执行以上代码时,node往事件循环中添加一个事件,可是事件循环的时候从队列中去除该事件,还不到3秒钟,这时怎么处理?

在比如一下代码

var fs = require(‘fs’) fs.fs.readFileSync(’./test.js’, function (error, data) { console.log(data) })

假如上面代码执行完,会在事件队列添加一个事件。下一轮事件循环的时候,取出该事件,假如这时读取文件还没返回,应该怎么处理呢?求解

2 回复

应该是无法这样操作,同步阻塞了上面sync

fs. readFileSync是同步方法 那么它会死等读文件操作 然后你上面的setTimeout也被阻塞了 我猜的。。。。。另外你的readFileSync是同步读 你的写法错了 你到底是想同步读还是异步读 搞清楚这个再说

回到顶部