Javascript Node.js使用readline和use填充数组

Javascript Node.js使用readline和use填充数组,javascript,arrays,node.js,Javascript,Arrays,Node.js,我试图填充一个数组,使数组中的每个元素都是文本文件的一行。一旦填充了数组,我就需要使用数组 所以我做了: var ar = new Array(); var rl = require('readline').createInterface({ input: require('fs').createReadStream('myfile'), terminal: false }); rl.on('line', (input) => { ar.push(input); })

我试图填充一个数组,使数组中的每个元素都是文本文件的一行。一旦填充了数组,我就需要使用数组

所以我做了:

var ar = new Array();
var rl = require('readline').createInterface({
  input: require('fs').createReadStream('myfile'),
  terminal: false
});
rl.on('line', (input) => {

     ar.push(input);

});
console.log(ar); // I shall be using the array after this
或者,这将起作用:

rl.on('line', (input) => {

     ar.push(input);

});
rl.on('close', (input) => {

     console.log(ar);

});
但在继续之前,我需要阅读5个或更多文件。在嵌套形式中使用事件“close”会使代码集群化和脏化。还有别的办法吗?
注意:我对Node.js非常陌生,因为NodeJS是异步的,readline是基于事件的,所以操作不会以代码过程顺序的语言进行

因此,首先要做的是实现一些控制流。一个很好的选择是使用

然后,您可以处理推送到某个本地数组的行事件,确保范围正确。例如,在代码中,可能记录的数组是空的,因为操作发生在不同的范围和时刻

所以,你可以这样做(可能不是更好的方式):

PS:使用new Array()并没有错,但您可以只使用[]来实现

const fs = require('fs')
const readline = require('readline')
const Promise = require('bluebird')

function fillArrayWithFileData(file) {
    return new Promise((resolve, reject) => {
        const array = []
        let rl = readline.createInterface({
            input: fs.createReadStream(file)
        });
        rl.on('line', line => {
            array.push(line)
        });
        rl.on('close', ()=>{
            return resolve(array)
        })
    })
}
//The list of relative paths to file, here in ./
let files = [
    'myfile1.txt',
    'myfile2.txt',
    'myfile3.txt',
    'myfile4.txt',
    'myfile5.txt',
    'myfile6.txt']
    .map(f => fillArrayWithFileData(f))

return Promise
    .all(files)
    .then(allData => {
        console.log(allData)
    })