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

654
Vistas
¿Cómo obtener una línea de lectura síncrona, o "simularla" usando asíncrono, en nodejs?

Me pregunto si hay una manera simple de obtener una línea de lectura "síncrona" o al menos obtener la apariencia de E / S síncrona en node.js

Yo uso algo como esto pero es bastante incómodo.

 var readline = require('readline'); var rl = readline.createInterface({ input: process.stdin, output: process.stdout, terminal: false }); var i = 0; var s1 = ''; var s2 = ''; rl.on('line', function(line){ if(i==0) { s1 = line; } else if(i==1) { s2 = line; } i++; }) rl.on('close', function() { //do something with lines })'

En lugar de esto, preferiría que fuera tan fácil como algo como

 var s1 = getline(); // or "await getline()?" var s2 = getline(); // or "await getline()?"

Condiciones útiles:

(a) Prefiero no usar módulos externos o el identificador de archivo /dev/stdio, estoy enviando código a un sitio web de envío de código y estos no funcionan allí

(b) Puede usar async/await o generadores

(c) Debe estar basado en líneas

(d) No debería requerir la lectura de la entrada estándar completa en la memoria antes del procesamiento

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

En caso de que alguien tropiece aquí en el futuro

Node11.7 agregó soporte para este doc_link usando async await await

 const readline = require('readline'); //const fileStream = fs.createReadStream('input.txt'); const rl = readline.createInterface({ input: process.stdin, //or fileStream output: process.stdout }); for await (const line of rl) { console.log(line) }

Recuerde envolverlo en la async function(){} , de lo contrario, obtendrá un error de palabra clave reservada .

 const start = async () =>{ for await (const line of rl) { console.log(line) } } start()

Para leer una línea individual, puede usar el iterador async manualmente

 const it = rl[Symbol.asyncIterator](); const line1 = await it.next();
over 4 years ago · Santiago Trujillo Denunciar

0

Al igual que el módulo readline , hay otro módulo llamado readline-sync , que toma una entrada síncrona.

Ejemplo:

 const reader = require("readline-sync"); //npm install readline-sync let username = reader.question("Username: "); const password = reader.question("Password: ",{ hideEchoBack: true }); if (username == "admin" && password == "foobar") { console.log("Welcome!") }
over 4 years ago · Santiago Trujillo Denunciar

0

Puedes simplemente envolverlo en una promesa -

 const answer = await new Promise(resolve => { rl.question("What is your name? ", resolve) }) console.log(answer)
over 4 years ago · Santiago Trujillo 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