保存使用 readline 模块制作的数组
Save array made with readline module
我有下一段代码。这是一个函数,必须 return 一个基于 txt 文件的数组。问题是当我逐个打印数组时,它打印得很好。但是当我从界面打印数组时,数组是空的。
const fs = require('fs');
const readline = require('readline');
function read_file(filename) {
const filePath = './uploads/' + filename;
var data = []
data = readline.createInterface({
input: fs.createReadStream(filePath),
terminal: false
}).on('line', function (
data.push(line);
console.log(data); // Here the array is filling well
});
console.log(data); // Buy here is empty again
}
这是因为 Node.js 的异步架构,您的 console.log
在读取文件任务之前执行。
如果你想要一个真实的结果,你必须让你的功能成为 return 承诺,并且还要注意当你的事件结束时然后解析你的数据。
类似的内容可能会对您有所帮助:
const fs = require('fs');
const readline = require('readline');
async function read_file(filename) {
const filePath = './uploads/' + filename;
var readData = [];
let data = await new Promise((resolve, reject) => {
try {
readline.createInterface({
input: fs.createReadStream(filePath),
terminal: false
})
.on('line', function (line) {
readData.push(line);
})
.on('close', function() {
resolve(readData);
});
}
catch(e) {
reject(e);
}
});
console.log(data);
}
我有下一段代码。这是一个函数,必须 return 一个基于 txt 文件的数组。问题是当我逐个打印数组时,它打印得很好。但是当我从界面打印数组时,数组是空的。
const fs = require('fs');
const readline = require('readline');
function read_file(filename) {
const filePath = './uploads/' + filename;
var data = []
data = readline.createInterface({
input: fs.createReadStream(filePath),
terminal: false
}).on('line', function (
data.push(line);
console.log(data); // Here the array is filling well
});
console.log(data); // Buy here is empty again
}
这是因为 Node.js 的异步架构,您的 console.log
在读取文件任务之前执行。
如果你想要一个真实的结果,你必须让你的功能成为 return 承诺,并且还要注意当你的事件结束时然后解析你的数据。
类似的内容可能会对您有所帮助:
const fs = require('fs');
const readline = require('readline');
async function read_file(filename) {
const filePath = './uploads/' + filename;
var readData = [];
let data = await new Promise((resolve, reject) => {
try {
readline.createInterface({
input: fs.createReadStream(filePath),
terminal: false
})
.on('line', function (line) {
readData.push(line);
})
.on('close', function() {
resolve(readData);
});
}
catch(e) {
reject(e);
}
});
console.log(data);
}