【发布时间】:2021-08-14 02:59:20
【问题描述】:
如果我们查看 fs.writeFile() method 的 Node.js 文档,我们会发现它本质上是异步的。
现在,考虑到这一点,我设置了以下代码来测试这个想法:
const fs = require('fs');
function sync(delay) {
const startingTime = new Date();
while ((new Date() - startingTime) < delay) {
// keep this loop going
}
}
fs.writeFile(__dirname + '/hello.txt', 'Hello World', function() {});
sync(4000);
我已经在 VSCode 中打开了 hello.txt 文件,每当向文件中写入一些数据时,VSCode 都会实时显示它。
我希望这段代码在 4 秒之前将 Hello World 写入文件 hello.txt(这是由 sync(4000) 引起的延迟),因为 fs.writeFile() 本质上是异步的(因为文件说)。然而,令我惊讶的是,任何数据都会在 4 秒后写入文件。
这似乎根本不是异步的!
我的问题是,为什么在整个脚本同步执行之前没有将数据写入文件hello.txt。
我怀疑(顺便说一句,我对操作系统线程了解不多)当调用fs.writeFile() 时,它会在另一个空闲的操作系统线程上异步写入文件(不阻塞主线程),但这并没有似乎没有发生。
我一直在测试很多其他与文件写入实用程序相关的东西,例如可写流,并且遇到了同样的问题。除非所有同步执行完成,否则不会写入任何内容。
我需要对这种内部事物进行清楚的解释。
【问题讨论】:
-
当您从
setTimeout函数中写入文件时会发生什么? -
@vanowm 结果相同。
-
如果你从
setTimeout执行sync? -
@vanowm 我不明白你的意思。
-
setTimeout(sync(4000));
标签: javascript node.js buffer file-writing