【问题标题】:Node.JS, How do i make the code await a pipe to finish creating a file?Node.JS,如何让代码等待管道完成创建文件?
【发布时间】:2021-12-23 22:47:31
【问题描述】:

我有以下代码:

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 尝试读取一个不存在的文件。

提前谢谢你,祝你有美好的一天。

【问题讨论】:

    标签: node.js asynchronous pipe


    【解决方案1】:

    好的,在研究文档后发现,当一个流完成时,它会设置它的标志.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();
    

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

    *我不确定它是否被称为事件监听器。

    【讨论】:

      猜你喜欢
      • 2014-05-22
      • 1970-01-01
      • 2013-01-18
      • 2016-10-16
      • 2015-10-24
      • 2020-02-10
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      相关资源
      最近更新 更多