繁体   English   中英

为什么使用 readFileAsync 来读取 Node.js 里面的 json 的文件?

[英]Why use readFileAsync to read file with json inside in Node.js?

我正在学习 Node.js 并正在观看 Node.js 课程,其中作者使用了以下代码:

const tours = JSON.parse(fs.readFileSync('data.json'));

app.get('/api/v1/tours', (req, res)=>{
res.status(200).json({tours.tours})
}))

如上代码所示,我们首先尝试通过同步读取文件来解析json。 作者说如果我们使用const tours = JSON.parse(fs.readFileSync('data.json')); 在 get() 的回调中,事件循环将被阻塞,因为回调是由事件循环执行的。 但由于作者提出

const tours = `JSON.parse(fs.readFileSync('data.json'));` 

在回调之外,该代码将被视为不被事件循环执行的顶级代码。 有点令人困惑的是,由于const tours = JSON.parse(fs.readFileSync('data.json')); 是顶层代码,作者说用同步版本的readFile就可以了。 我认为同步 readFile 最好避免被使用,因为它是阻塞的。 即使使用 readFileSync 同步顶级代码也不会阻塞是真的,还是作者使用 readFileSync 作为顶级代码是错误的?

Node.js 中的每个代码都在事件循环中运行。 顶级代码也是如此,因此事件循环将被阻塞。 没有什么变化。 可以在顶层执行此操作的原因是,在初始代码运行期间,代码仅被阻塞一次。 .get()内部,您将在每个请求期间阻止整个应用程序。 那将是一场灾难。

话虽如此,代码给人的印象是你不应该担心在顶层阻塞。 这是错误的。 它会增加您的应用程序启动时间。 如果你堆叠了很多这样的调用,你会在启动过程中看到明显的延迟。 经验法则是:无论如何,始终避免在 Node.js 中进行同步 I/O。

IMO 课程存在严重缺陷。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM