Node.js NodeJS-如何异步读取多个文件并将读取内容写入一个文件

Node.js NodeJS-如何异步读取多个文件并将读取内容写入一个文件,node.js,asynchronous,read-write,Node.js,Asynchronous,Read Write,我想在NodeJS中异步读取多个文件。当读取顺序无关紧要时,最好同时读取多个文件 但是,我正在尝试将这些文件的内容一起写入一个文件。我可以很好地编写一个文件,但在我将所有内容写入该文件之前,如何确保所有文件都已读取?用户通过以下方法之一承诺: 创建承诺,读取文件时解析每个承诺 使用bluebird为fs创建类似Promise的方法 使用模块 然后将所有这些承诺保存到数组中并使用 另一种方法是迭代变量,即var filesRead=0。读取文件时,增加此数字filesRead++。在此之后,始终检

我想在NodeJS中异步读取多个文件。当读取顺序无关紧要时,最好同时读取多个文件


但是,我正在尝试将这些文件的内容一起写入一个文件。我可以很好地编写一个文件,但在我将所有内容写入该文件之前,如何确保所有文件都已读取?

用户通过以下方法之一承诺:

  • 创建承诺,读取文件时解析每个承诺
  • 使用bluebird为fs创建类似Promise的方法
  • 使用模块
  • 然后将所有这些承诺保存到数组中并使用

    另一种方法是迭代变量,即
    var filesRead=0
    。读取文件时,增加此数字
    filesRead++
    。在此之后,始终检查,如果您读取了所有文件,如果是,您可以进行写入

    if (filesRead === numberOfFilesToRead){
        //write things
    }
    

    用户通过以下方法之一作出承诺

  • 创建承诺,读取文件时解析每个承诺
  • 使用bluebird为fs创建类似Promise的方法
  • 使用模块
  • 然后将所有这些承诺保存到数组中并使用

    另一种方法是迭代变量,即
    var filesRead=0
    。读取文件时,增加此数字
    filesRead++
    。在此之后,始终检查,如果您读取了所有文件,如果是,您可以进行写入

    if (filesRead === numberOfFilesToRead){
        //write things
    }
    
    使用:

    “严格使用”;
    设fs=require('fs'),
    async=require('async'),
    输入=['in1','in2'],
    输出='输出';
    功能保险丝(输入、输出、回调){
    map(输入,(路径,回调)=>{
    fs.readFile(路径,回调);
    },(错误,内容)=>{
    如果(错误){
    回调(错误);
    }否则{
    fs.writeFile(输出,内容.减少((a,b)=>{
    返回a+b;
    }),回调);
    }
    });
    }
    保险丝(输入、输出,(错误)=>{
    如果(错误){
    console.log('错误:'+错误);
    }否则{
    console.log('OK');
    }
    });
    
    编辑:

    使用承诺:

    “严格使用”;
    常量fs=require('fs'),
    输入=['in1','in2'],
    输出='out'
    //Promisify fs.readFile
    函数读取(文件){
    返回新承诺((解决、拒绝)=>{
    fs.readFile(文件,(错误,数据)=>{
    如果(错误){
    拒绝(错误);
    }否则{
    解析(数据);
    }
    });
    });
    }
    //Promisify fs.writeFile
    函数写入(文件、数据){
    返回新承诺((解决、拒绝)=>{
    fs.writeFile(文件、数据,(错误)=>{
    如果(错误){
    拒绝(错误);
    }否则{
    解决();
    }
    });
    });
    }
    Promise.all(inputs.map(read))//读取所有文件
    。然后((data)=>{//data将是文件中的数据数组
    const outData=data.reduce((a,b)=>{
    返回a+b;//连接数据
    })
    返回write(output,outData);//写入输出
    })
    .然后(()=>{
    console.log('OK');
    })
    .catch((错误)=>{
    控制台错误(error);
    });
    
    (未经测试,但总体思路在此) 正如libik所指出的,
    fs promise
    util.promisify
    bluebird
    是promisify
    fs.readFile
    fs.writeFile
    的替代品,使用:

    “严格使用”;
    设fs=require('fs'),
    async=require('async'),
    输入=['in1','in2'],
    输出='输出';
    功能保险丝(输入、输出、回调){
    map(输入,(路径,回调)=>{
    fs.readFile(路径,回调);
    },(错误,内容)=>{
    如果(错误){
    回调(错误);
    }否则{
    fs.writeFile(输出,内容.减少((a,b)=>{
    返回a+b;
    }),回调);
    }
    });
    }
    保险丝(输入、输出,(错误)=>{
    如果(错误){
    console.log('错误:'+错误);
    }否则{
    console.log('OK');
    }
    });
    
    编辑:

    使用承诺:

    “严格使用”;
    常量fs=require('fs'),
    输入=['in1','in2'],
    输出='out'
    //Promisify fs.readFile
    函数读取(文件){
    返回新承诺((解决、拒绝)=>{
    fs.readFile(文件,(错误,数据)=>{
    如果(错误){
    拒绝(错误);
    }否则{
    解析(数据);
    }
    });
    });
    }
    //Promisify fs.writeFile
    函数写入(文件、数据){
    返回新承诺((解决、拒绝)=>{
    fs.writeFile(文件、数据,(错误)=>{
    如果(错误){
    拒绝(错误);
    }否则{
    解决();
    }
    });
    });
    }
    Promise.all(inputs.map(read))//读取所有文件
    。然后((data)=>{//data将是文件中的数据数组
    const outData=data.reduce((a,b)=>{
    返回a+b;//连接数据
    })
    返回write(output,outData);//写入输出
    })
    .然后(()=>{
    console.log('OK');
    })
    .catch((错误)=>{
    控制台错误(error);
    });
    
    (未经测试,但总体思路在此) 正如libik所指出的,
    fs promise
    util.promisify
    bluebird
    是promisify
    fs.readFile
    fs.writeFile
    的替代品