Javascript 如何使使用流读取文件在NodeJS中同步工作?

Javascript 如何使使用流读取文件在NodeJS中同步工作?,javascript,node.js,node-modules,Javascript,Node.js,Node Modules,这是我的代码,我想让readerstream1先显示文件的所有内容,然后在不改变higherWaterMark的情况下向readerstream2移动。简单地说,我希望它同步工作 谢谢 您可以将流的处理封装在一个承诺中,并监听解析承诺的end-事件。在等待这个承诺之后,你可以继续下一个承诺。类似这样的情况仍然需要错误处理,但应该给您一个开始: function getReadStreamPromise(filePath, opts) { return new Promise((resolv

这是我的代码,我想让readerstream1先显示文件的所有内容,然后在不改变higherWaterMark的情况下向readerstream2移动。简单地说,我希望它同步工作 谢谢


您可以将流的处理封装在一个承诺中,并监听解析承诺的
end
-事件。在等待这个承诺之后,你可以继续下一个承诺。类似这样的情况仍然需要错误处理,但应该给您一个开始:

function getReadStreamPromise(filePath, opts) {
   return new Promise((resolve, reject) => {
      const readerstream = fs.createReadStream(filePath, opts);
      readerstream.on('data', (chunk) => {
         // handle chunk
      })
      readerstream.on('error', (err)=> {
         reject(err);
      })
      readerstream.on('end', () => {
         resolve();
      })

   })
}

async function processStreams() {
   await getReadStreamPromise('shamoon.txt', { highWaterMark: 8 });
   await getReadStreamPromise('shamoon1.txt', { highWaterMark: 8 });      
}
请注意,您可以简单地使用
fs.promises.readFile
异步但顺序地读取文件:

async function processStreams() {
    const content = await fs.promises.readFile('shamoon.txt');
    const content2 = await fs.promises.readFile('shamoon1.txt');
    await fs.promises.writeFile('put.txt', "someContent");
}

我认为有一个
readerstream1.on('end')
事件被触发了,不是吗?因此,您知道文件何时完成。完成第一个文件后,可以启动第二个文件。无论如何,为什么需要流来读取简单的文本文件?为什么不干脆
fs.readFile()
?我刚刚发布了一个示例,其中我正在阅读文本文件,但实际上我必须阅读两个mp3文件,并将它们组合成一个mp3文件,可以使用流来完成。由于它是异步工作的,所以它没有以正确的顺序组合我的文件。您可以将函数标记为“async”,并使用“await”关键字:let readerstream1=await fs.createReadStream…这是什么意思?Async/await只是承诺周围的合成糖?您是否尝试过我提供的解决方案?
async function processStreams() {
    const content = await fs.promises.readFile('shamoon.txt');
    const content2 = await fs.promises.readFile('shamoon1.txt');
    await fs.promises.writeFile('put.txt', "someContent");
}