Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

95
Vistas
¿Cómo espero que una función regrese a una variable global antes de continuar con el script?

Esta es mi función y me pregunto cómo haría para esperar en la variable global para poder usar la lista en otra función. Sé que esta no es la mejor práctica en javascript, pero no entender cómo esperaría me molesta.

 function load_csv_async(){ return new Promise((resolve,reject) => { const fileInput = document.querySelector('input'); fileInput.addEventListener('change', (event) => { const input = event.target; const reader = new FileReader(); reader.onload = () => { list = reader.result.split(/\r?\n/); console.log(list) }; reader.readAsText(input.files[0]); }) }); } const check = load_csv_async().catch((error) => { console.log(error)}); console.log(check);
 <!DOCTYPE html> <meta charset="utf-8"> <input type="file" name="inputfile" id="inputfile">

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Es una buena idea usar promesas y envolver el lector de archivos con una. Su función de lectura debe invocar resolve cuando se carga el archivo (y debe invocar reject en caso de error).

También tiene sentido separar la acción desencadenante y un lector de archivos asíncrono genérico que toma un archivo y devuelve una promesa. Si lo hace, proporcionará un lugar natural para obtener los contenidos, evitando un global por completo ...

 const fileInput = document.querySelector('input'); fileInput.addEventListener('change', async (event) => { try { const fn = event.target.files[0]; const text = await load_csv_async(fn); // text was global, now it's in a functional scope where it belongs console.log(text); } catch(err) { console.log(err); } }); async function load_csv_async(fn){ return new Promise((resolve,reject) => { const reader = new FileReader(); reader.onload = () => { const list = reader.result.split(/\r?\n/); resolve(list); }; reader.onerror = error => { reject(error) }; reader.readAsText(fn); }); }
 <!DOCTYPE html> <meta charset="utf-8"> <input type="file" name="inputfile" id="inputfile">

about 4 years ago · Juan Pablo Isaza Denunciar

0

Por lo que entendí su pregunta, desea que el resultado de la carga de csv sea manejado por otra llamada de función. Para esto, no necesita envolverlo dentro de una función de promesa o asíncrona, simplemente puede estructurar su programa para llamar a las funciones dentro del controlador de eventos:

 fileInput.addEventListener('change', (event) => { const input = event.target; const reader = new FileReader(); reader.onload = () => { list = reader.result.split(/\r?\n/); console.log(list) }; // if you want to have this as global variable just put it outside the Event Listener let result = reader.readAsText(input.files[0]); someOtherFunction(result) }) function someOtherFunction(param) { console.log(param) }
 <!DOCTYPE html> <meta charset="utf-8"> <input type="file" name="inputfile" id="inputfile">

Sugerencia: si usa la promesa para cualquier cosa: debe llamar a resolve en el resultado y reject en el error para manejarlo correctamente:

 return new Promise((resolve, reject) => { result = SomeFunctionToGetYourResult(); if (result=="SomeTargetValue") { // Resolve if result is as intended resolve(result) } else { // Reject if your call was unsuccesfull. reject(SomeError) } })

Otra opción es llamar a una función asíncrona en javascript:

 async function someAsyncFunc() { return someAsyncProcessedValue; } let global; try { global = await someAsyncFunction(); } catch (error) { console.log(error) }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda