我是 Javascript 新手,我不了解如何將資料保存在陣列中。在我的函式中,我逐行讀取檔案并將其保存在陣列中。我認為因為陣列是在函式外部宣告的,所以資料會保留在其中,但事實并非如此。我想了解在資料仍然保留的函式之外列印陣列的值時該怎么辦。
我的代碼:
const fs = require('fs');
const readline = require('readline');
var array = [];
async function processLineByLine() {
const fileStream = fs.createReadStream('data.txt');
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity,
});
for await (const line of rl) {
array.push(line);
}
//console.log(array.toString());
}
processLineByLine();
console.log(array.toString());
預期的輸出將是陣列內的資料:
288355555123888,335333555584333,223343555124001,002111555874555,111188555654777,111333555123333
uj5u.com熱心網友回復:
因為processLineByLine是異步函式,所以console.log在異步填充陣列之前運行。
異步功能完成后需要登錄,如下圖:
processLineByLine().then(() => console.log(array.toString()));
此外,您不需要array在函式外部宣告,您可以將其移動到函式內部并從那里回傳,并將作為引數傳遞給.then回呼,如下所示:
const fs = require("fs");
const readline = require("readline");
async function processLineByLine() {
const array = [];
const fileStream = fs.createReadStream("data.txt");
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity,
});
for await (const line of rl) {
array.push(line);
}
return array;
}
processLineByLine().then((array) => console.log(array.toString()));
uj5u.com熱心網友回復:
你不會得到,因為它是異步呼叫。試試下面的片段
const fs = require('fs');
const readline = require('readline');
var array = [];
async function processLineByLine() {
const fileStream = fs.createReadStream('data.txt');
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity,
});
for await (const line of rl) {
array.push(line);
}
}
processLineByLine().then(()=>{
console.log(array);
});
如果 data.txt 的每一行都像 288355555123888, 335333555584333, 223343555124001,... 并且想要提取這些數字吐出每一行然后將其添加到陣列中。
for await (const line of rl) {
array=[...array, ...line.split(',')];
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/469099.html
標籤:javascript 数组 阅读线
下一篇:如何使用新陣列串列更新字典陣列?
