fs.readFile有效,但readFileSync返回空内容

时间:2018-11-21 17:35:06

标签: node.js fs

以下代码块将content变量保留为空:

const file = fs.createWriteStream("/home/pi/rpi-main/descriptor.json");

http.get(url, function (response) {
    let content;

    response.pipe(file);
    content = fs.readFileSync("/home/pi/rpi-main/descriptor.json", { encoding: "utf-8" });
});

但是,如果我使用fs.readFile读取文件,则内容应为原样。

为什么在同步呼叫中会发生这种情况?

1 个答案:

答案 0 :(得分:1)

这是因为pipe是一个异步函数,因此当您调用readFileSync时,它实际上还没有开始向文件中写入任何内容。

您应该在管道的finish事件的回调中读取文件。

response.pipe(file).on('finish', () => {
    content = fs.readFileSync(filename, { encoding: "utf-8" });
});