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

125
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 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