Soy nuevo en Javascript y no entiendo cómo conservar los datos en una matriz. En mi función, estoy leyendo un archivo línea por línea y guardándolo en una matriz. Pensé que debido a que la matriz se declara fuera de la función, los datos permanecerían en ella, pero eso no es lo que sucede. Me gustaría entender cómo hacer al imprimir los valores de la matriz fuera de la función que aún quedan datos.
Mi código:
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());El resultado esperado sería tener los datos dentro de la matriz:
288355555123888,335333555584333,223343555124001,002111555874555,111188555654777,111333555123333Debido a que processLineByLine es una función asíncrona, console.log se ejecuta antes de que la función asíncrona haya llenado la matriz.
Debe iniciar sesión después de que se haya completado la función asíncrona, como se muestra a continuación:
processLineByLine().then(() => console.log(array.toString())); Además, no necesita declarar la array fuera de la función, puede moverla dentro de la función y devolverla desde allí y eso pasaría como argumento a la devolución de llamada .then , como se muestra a continuación:
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()));No lo obtendrá ya que es una llamada asíncrona. intente debajo del fragmento
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); });si cada línea de data.txt es como 2883555555123888, 335333555584333, 223343555124001,... y desea extraer esos números, escupa cada línea y luego agréguela a la matriz.
for await (const line of rl) { array=[...array, ...line.split(',')]; }