Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将文件的每一行传输到数组单元格?_Javascript_Node.js - Fatal编程技术网

Javascript 如何将文件的每一行传输到数组单元格?

Javascript 如何将文件的每一行传输到数组单元格?,javascript,node.js,Javascript,Node.js,我尝试读取一个id为的文件,并将其作为数组返回。每行包含一个id。我想将每个id传输到一个数组单元格。这是我的密码: var fs = require('fs'); var reader = fs.createReadStream('RTIdList.js', {encoding: 'utf8'}); reader.once( 'end' , function () { console.log( 'Read completed successfully.' ); }); var

我尝试读取一个id为的文件,并将其作为数组返回。每行包含一个id。我想将每个id传输到一个数组单元格。这是我的密码:

var fs = require('fs');
var reader = fs.createReadStream('RTIdList.js', {encoding: 'utf8'});
reader.once( 'end' ,  function ()  { 
    console.log( 'Read completed successfully.' ); 
});

var lineReader = require('readline').createInterface({
  input: reader,
});

function RTIdReader(){
  var arrayPos = 0;
  var idArray = new Array();

  lineReader.on('line', function (line) {
    console.log('Line from file:', line); 
    idArray[arrayPos] = line;
    arrayPos++;
  });

  console.log('idArray[0]: '+idArray[0]);
  return idArray;
}

RTIdReader();  
你知道我做错了什么吗?这怎么可能是正确的呢

@德拉卡桑:代码一直工作到填充数组。我无法console.log或返回数组。代码在lineReader.on之后停止

大约两个星期以来,我一直在为电话回电而苦苦挣扎。猜猜,我不明白他们的意思。这是我的尝试:

var fs = require('fs');

function RT(idList){
  console.log('RT works');
}

function idList(){
  var idArray = new Array();
  var reader = fs.createReadStream('RTIdList.js', {encoding: 'utf8'});
  reader.once( 'end' ,  function ()  { 
      console.log( 'Read completed successfully.' ); 
  });

  var lineReader = require('readline').createInterface({
    input: reader,
  });

  return {
    lineReader.on('line', function (line) {
      console.log('Line from file:', line); 
      idArray.push(line);
      return idArray;
    }
  }
}  

RT();
为什么我的回调不起作用

好的,回到开始。这就是我开始的

var fs = require('fs');

var idArray = new Array();
var reader = fs.createReadStream('RTIdList.js', {encoding: 'utf8'});
reader.once( 'end' ,  function ()  { 
  console.log( 'Read completed successfully.' ); 
});

var lineReader = require('readline').createInterface({
  input: reader,
});

lineReader.on('line', function (line) {
  console.log('Line from file:', line); 
  idArray.push(line);
});

除了回调,我必须在何处以及如何执行?

使用
push
将数据添加到数组中时,您的做法是以类似数组的方式将属性添加到对象中。差别很小,但以后可能会咬你的屁股

检查文档以了解如何使用它,您根本不需要读者

返回的时间与代码开始读取文件的时间相同,您需要检查异步函数的工作方式

工作代码提示:

您根本不需要fs.createReadStream

包含数组中所有ID的回调将位于
.on('close',function(){/*here*/})中

编辑:

在javascript中,可以将函数作为参数传递,并创建匿名函数

因此,在异步代码中不使用
return
,而是将代码的其余部分作为参数传递,按照惯例,参数名为
callback

至于如何使用readline读取文件,一个很好的例子是,它可以在不到5分钟的时间内转换为您的用例

编辑:

好的,我花了时间来编写代码

(arg)=>{}
函数(arg){}

const readline = require('readline');
const fs = require('fs');

function RT(file, callback) {
  let idArray = [];     //Declare idArray

  const rl = readline.createInterface({  //Set and start readline
    input: fs.createReadStream(file)
  });

  rl.on('line', (line) => { //For each line
    console.log('Line from file:', line);
    idArray.push(line);   //Add it to the array
  });

  rl.on('close', () => {  //At the end of the file
    callback(idArray);    //Call the rest of the code
  });
}

RT('RTIdList.js', (idArray) => {
  console.log('Here is the idArray: ' + idArray);
});

代码有效吗?如果不是,它应该做什么/不做什么/不做什么?而不是
idArray[arrayPos]=line;arrayPos++
您只需执行
idArray.push(line)
,这更容易阅读,也更不容易出错。这是异步函数的一个问题,在读取文件之前,console.log execute wayyyy。谢谢:我曾尝试将返回值放入函数(line){…},但它在第一轮返回数组。你知道我该怎么写吗?谢谢,我试着和callback合作。请看一看,我的代码有什么问题。@NewbieXXL:不,您没有以异步代码返回,请查看我提供的链接,它可以很容易地编辑以将数据推送到数组中,然后您只需要添加一个回调就可以了。我从这个示例开始。但是,由于缺乏经验,我无法根据自己的意愿转换此代码。@NewbieXXL:我花了时间给你代码,研究它,试图了解发生了什么,为什么以及如何工作,并与你的代码进行比较。您需要尽快找到一门关于异步编程和回调的课程。非常感谢您,DrakaSAN。我会研究代码的!顺便问一下,“=>”是什么命令?我想,我已经找到了答案。“=>”代表函数。对吗?