Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

658
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!