我尝试读出一个带有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();
你有一个想法,我做错了什么?怎么会这样?
@DrakaSAN:代码一直有效,直到填满数组。我无法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);
});
除了回调之外我该怎么做?
答案 0 :(得分:1)
在向数组添加数据时使用push
,您执行此操作的方式是将属性添加到数组中的对象,如时尚。差异很小,但可能会在以后咬你的屁股。
查看readline文档以了解如何使用它,您根本不需要阅读器。
您的返回与代码开始读取文件的同时发生,您需要检查异步函数的工作方式。
使用代码的提示:
你根本不需要fs.createReadStream。
数组中所有id的回调都在.on('close', function () {/*here*/});
编辑:
在javascript中,您可以将函数作为参数传递,并创建匿名函数。
因此,您不在异步代码中使用return
,而是将其余代码作为参数传递,按照惯例将其命名为callback
。
至于如何使用readline来读取文件,一个很好的例子是in the documentation,它可以在不到5分钟的时间内转换为你的用例。
编辑:
好的,我已经花时间制作代码了。
(arg) => {}
与function (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);
});