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

时间:2016-08-18 14:23:09

标签: node.js asynchronous read-write

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

但是,我试图将这些文件的内容一起写入一个文件。我可以写一个文件,但是如何在将所有内容写入该文件之前确保已经读取了所有文件?

2 个答案:

答案 0 :(得分:1)

用户承诺采用以下方法之一

  1. 创建承诺,在阅读文件时解析每个承诺
  2. 使用bluebird为fs
  3. 创建类似Promise的方法
  4. 使用fs-promise模块
  5. 然后将所有这些承诺保存到数组中并使用Promise.all

    其他方式可以是迭代变量,即var filesRead = 0。读取文件时,请增加此编号filesRead++。在此之后,请务必检查,如果您阅读了所有文件,如果是,则可以进行写作

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

答案 1 :(得分:1)

使用async

'use strict';

let fs = require('fs'),
    async = require('async'),
    inputs = ['in1', 'in2'],
    output = 'out';

function fuse(inputs, output, callback) {
    async.map(inputs, (path, callback) => {
        fs.readFile(path, (data) => {
            callback(null, data);
        });
    }, (err, contents) => {
        if(error) {
            callback(error);
        } else {
            fs.writeFile(output, contents.reduce((a, b) => {
                return a + b;
            }), (error) => {
                callback(error);
            });
        }
    });
}

fuse(inputs, output, (error) => {
    if(error) {
        console.log('Error: ' + error);
    } else {
        console.log('OK');
    }
});