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)
})