新手关于supervisor和读取文件同步异步例子的问题
发布于 9 年前 作者 linsen2015 2774 次浏览 最后一次编辑是 8 年前 来自 问答

现象1: npm install supervisor -g 安装supervisor后 执行下面js代码(安装后无任何修改)<br/> var http = require(‘http’);<br/> http.createServer(function(req, res) {<br/> res.writeHead(200, {‘Content-Type’: ‘text/html’});<br/> res.write(‘Node.js’);<br/> res.end(’<p>Hello Worldwwwwwwwwwwww</p>’);<br/> }).listen(3000);<br/> console.log(“HTTP server is listening at port 3000.”);<br/> 描述1:其中wwwwwwww为后修改内容 <br/> 执行supervisor D:\test\NoteJS\test.js<br/> 但cmd中的命令窗口没有任何变化 刷新浏览器wwwwwwww没有显示<br/> 问题1:是不是我修改了js文件的内容 supervisor应该重新启动后 取得最新的js文件内容?<br/> 没有被重新加载的原因大概有什么?<br/> =======================================================================<br/> 描述2:var fs = require(‘fs’);<br/> fs.readFile(‘D:/test/NoteJS/file.txt’, ‘utf-8’, function(err, data) {<br/> if (err) {<br/> console.error(err);<br/> } else {<br/> console.log(data);<br/> }<br/> });<br/> console.log(‘end111.’);<br/> ////////////////////////////////////////////////////////////////<br/> var fs2 = require(‘fs’);<br/> var data2 = fs2.readFileSync(‘D:/test/NoteJS/file.txt’, ‘utf-8’);<br/> console.log(data2);<br/> console.log(‘end222.’);<br/> 描述2:上面两段代码写在同一js文件里了(file.txt的内容为aaaaaa)<br/> 预计输出end111<br/> aaaaaa<br/> aaaaaa<br/> end222<br/> 实际输出end111<br/> aaaaaa<br/> end222<br/> aaaaaa<br/> 问题2:为什么同步也是先输出end222后输出文件内容aaaaaa<br/> (当我注释掉第一段代码 只剩下同步读取时 输出顺序为aaaaaa end222 )

2 回复

第一个问题,没用过supervisor模块,推断是个watch file 模块,建议到issues 里面看看有没有同类问题,实在不行换其他模块试试 第二个问题,首先指出以下var fs2=require(‘fs’);没有实际意义 实际上引用的是同一个对象,第一次require的时候就已经根据路径建立缓存了。 之后关于同步异步的问题,你在console.log()中加入标记字符串就知道了。 你的end111 aaaaaa end222 aaaaaa实际是 end111 ‘sync’+‘aaaaaa’ end222 ‘async’+‘aaaaaa’ ,符合同步和异步逻辑。第一次aaaaaa就是同步读取 的内容。因为两次内容一致可能影响了你对顺序的判断

supervisor: 你文件保存了吗?

回到顶部