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

标签 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);

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

相关文章:

php - 如何将javascript变量数据发送到php

javascript - HTML 文本区域 : is it possible to change cursor position?

ruby-on-rails - RoR 将对象添加到已经在 def 初始化中的数组?

c - 长数组的序列化(在 C 中)

angularjs - Angular 全栈无法运行

javascript - 如何使用 gulp 在一项任务中运行 uglify 然后进行 strip-debug

javascript - 带有组合框的第二列

java - 用java创建一个魔方

javascript - 根据用户时区返回本地货币代码

javascript - Node.js Web 应用程序 API 调用结果为 ENOTFOUND