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

136
Views
¿Cómo resolver la promesa con retraso en un bucle sin async/await?

Tengo una función llamada printLetters() que imprime letras después de 1000ms. Esperaba que imprimiera letras de una en una con un retraso de 1000 ms, pero imprime todas las letras a la vez. Funciona cuando lo convierto a la función asíncrona. Sin embargo, ¿cómo hago para que printLetters() resuelva cada promesa con retraso sin async/await?

 const printLetters = (l) => { for (let i = 0; i < l.length; i++) { delay(1000).then(() => { console.log(l[i]); }) } } const printLettersAsync = async(l) => { for (let i = 0; i < l.length; i++) { await delay(1000); console.log(l[i]); } } const delay = (t) => { return new Promise(res => setTimeout(res, t)) } const arr = ['a','b','c'] printLetters(arr) printLettersAsync(arr)
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Multiplique el número que pasa al delay por el índice de iteración.

 const printLetters = (letters) => { for (let i = 0; i < letters.length; i++) { delay(1000 * i).then(() => { console.log(letters[i]); }) } } const delay = (t) => { return new Promise(res => setTimeout(res, t)) } const arr = ['a','b','c'] printLetters(arr)

Pero no tiene mucho sentido una función de retraso a la que pasa una devolución de llamada: setTimeout es más fácil.

 const printLetters = (letters) => { for (let i = 0; i < letters.length; i++) { setTimeout(() => console.log(letters[i]), i * 1000); } } const arr = ['a','b','c'] printLetters(arr)

about 4 years ago · Juan Pablo Isaza Report

0

Para emular await , debe convertir su función en una función recursiva. Lo que esto significa es que debe abandonar el bucle for y crear su propio código de bucle utilizando la recursividad:

 const printLoop = (l, callback) => { if (l.length > 0) { const letter = l.shift(); console.log(letter); delay(1000).then(() => printLoop(l,callback)); // this is the loop } else { callback(); // we're done } } const printLetters = (l, cb) => { const letters = Array.from(l); // Copy the array // to avoid side effects. // This is optional but // included to retain similar // behavior to original code. printLoop(letters, cb); } const arr = ['a','b','c']; printLetters(arr, () => console.log('done printing letters'));

Esto es lo que hace await . Vuelve a compilar su código en una estructura similar al ejemplo anterior.

about 4 years ago · Juan Pablo Isaza 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!