gpt4 book ai didi

javascript - Node.js 使用 readline 填充数组并使用

转载 作者:太空宇宙 更新时间:2023-11-04 00:26:17 25 4
gpt4 key购买 nike

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

所以我做到了:

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 是基于事件的,因此操作不会像语言那样按代码过程顺序发生。

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

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

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

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

PS:使用new Array()并没有错,但是你可以只使用[]到declare an array .

关于javascript - Node.js 使用 readline 填充数组并使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42649236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com