了解fs.writeFileSync(路径,数据[,选项])Node.js

了解fs.writeFileSync(路径,数据[,选项])Node.js,node.js,asynchronous,Node.js,Asynchronous,我有一个函数,将数据写入文件,然后将该文件上传到云存储。文件在开始上传之前还没有写完,所以我在云存储中得到了一个部分文件。我发现fs.writeFileSync(path,data[,options])可能会有所帮助,但我不确定它是如何工作的 据我所知,节点是异步运行的,在这部分代码之前,我有几个异步进程在运行。我理解同步与异步的含义,但我在理解它在本例中的作用时有点困难。如果我用fs.writeFileSync(路径,数据[,选项])替换下面的代码,下面是我的问题。 文档中的“同步向文件追加数

我有一个函数,将数据写入文件,然后将该文件上传到云存储。文件在开始上传之前还没有写完,所以我在云存储中得到了一个部分文件。我发现
fs.writeFileSync(path,data[,options])
可能会有所帮助,但我不确定它是如何工作的

据我所知,节点是异步运行的,在这部分代码之前,我有几个异步进程在运行。我理解同步与异步的含义,但我在理解它在本例中的作用时有点困难。如果我用
fs.writeFileSync(路径,数据[,选项])替换下面的代码,下面是我的问题。

  • 文档中的“同步向文件追加数据”是什么意思
    • a。在
      fs.writeFileSync(路径,数据)
      完成之前,下一行代码是否会暂停
    • b。以前的异步进程是否被这行代码停止
  • 如果其他异步进程不受影响,
    writeFileSync
    writeFile
    有何不同

  • writeFileSync
    中是否有我误解的回调功能

  • 参考代码

    outCsv = "x","y","z"
    filename = "file.csv"
    fs.writeFile(filename, outCsv, function (err) {
            if (err) {
                return console.log(err);
            }
            console.log('The file was saved!');
            bucket.upload(filename, (err, file) => {
                if (err) {
                    return console.log(err);
                }
                console.log('The file was uploaded!');
            });
        });
    
    在fs.writeFileSync(路径,数据)完成之前,下一行代码是否会暂停

    对。这是一个阻塞操作。请注意,您假设
    fs.writeFileSync
    完成

    以前的异步进程是否被这行代码停止

    有点。由于JavaScript是单线程的,所以在文件写入时它们也不会运行,而是在事件循环的下一个滴答声时排队

    如果其他异步进程不受影响,writeFileSync与writeFile有何不同

    它会阻止后面的任何代码。对于一个更简单的例子,考虑如下:

    setTimeout(() => console.log('3'), 5);
    console.log('1'); // fs.writeFileSync
    console.log('2');
    
    vs

    第一个将打印1 2 3,因为对
    console.log的调用会阻塞后面的内容。第二个将打印2 1 3,因为setTimeout是非阻塞的。打印3的代码不会受到任何影响:3总是最后一个

    writeFileSync中是否有我误解的回调功能

    不知道。你没有发布足够的代码让我们说

    这一切都引出了一个问题:为什么选择
    fs.writeFile
    而不是其他选择。答案是:

    同步版本将被阻止

    虽然需要花费多长时间,但您的Web服务器不处理请求

    在fs.writeFileSync(路径,数据)完成之前,下一行代码是否会暂停

    对。这是一个阻塞操作。请注意,您假设
    fs.writeFileSync
    完成

    以前的异步进程是否被这行代码停止

    有点。由于JavaScript是单线程的,所以在文件写入时它们也不会运行,而是在事件循环的下一个滴答声时排队

    如果其他异步进程不受影响,writeFileSync与writeFile有何不同

    它会阻止后面的任何代码。对于一个更简单的例子,考虑如下:

    setTimeout(() => console.log('3'), 5);
    console.log('1'); // fs.writeFileSync
    console.log('2');
    
    vs

    第一个将打印1 2 3,因为对
    console.log的调用会阻塞后面的内容。第二个将打印2 1 3,因为setTimeout是非阻塞的。打印3的代码不会受到任何影响:3总是最后一个

    writeFileSync中是否有我误解的回调功能

    不知道。你没有发布足够的代码让我们说

    这一切都引出了一个问题:为什么选择
    fs.writeFile
    而不是其他选择。答案是:

    同步版本将被阻止


    虽然这需要花多长时间,但您的Web服务器无法处理请求。

    谢谢,jonrsharpe的编辑谢谢,jonrsharpe的编辑谢谢,非常感谢这非常有帮助!非常感谢,这非常有帮助!