Node.JS,如何让代码等待管道完成文件创建?

Node.JS, How do i make the code await a pipe to finish creating a file?

我有以下代码:

const fs = require('fs');
var get = require('get-file');

async function func1(){
  get('jonschlinkert/get-file', 'package.json', function(err, res) {
    if (err) return console.error(err);   
    var file = fs.createWriteStream('mani.json'); 
    res.pipe(file);
  });
};

async function func2(){
  await func1();
  fs.readFile("./mani.json", "utf8", (err, jsonString) => {
    if (err) {
      console.log("Error reading file from disk:", err);
      return;
    }
    try {
      const test = JSON.parse(jsonString);      
      console.log(test.files['main.js']);
    } catch (err) {
      console.log("Error parsing JSON string:", err);
    }
  });
};
func2();

我需要找到一种方法使功能 2 仅在功能 1 的管道完成创建文件后激活,我很难使用 await func1();可以解决问题,但什么也没做,所以函数 2 会尝试读取一个不存在的文件。

提前谢谢你,祝你有愉快的一天。

好的,在研究文档后发现,当一个流完成时它会设置它的标志 .finish。所以我需要做的就是将“事件侦听器”*设置为 .finish 并在其中调用 func2,甚至不需要我尝试使用但未能使其工作的异步:

const fs = require('fs');
var get = require('get-file');

function func1(){
  get('jonschlinkert/get-file', 'package.json', function(err, res) {
    if (err) return console.error(err);   
    var file = fs.createWriteStream('mani.json');

    file.on('finish', () => {      
      func2();
    });

    res.pipe(file);
  });
};

function func2(){
  fs.readFile("./mani.json", "utf8", (err, jsonString) => {
    if (err) {
      console.log("Error reading file from disk:", err);
      return;
    }
    try {
      const test = JSON.parse(jsonString);      
      console.log(test.files['main.js']);
    } catch (err) {
      console.log("Error parsing JSON string:", err);
    }
  });
};
func1();

谢谢大家,希望有一天这对某人有所帮助。

*不知道是不是叫事件监听