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

161
Vistas
Promise.allSettled donde la lista de promesas varía de forma incremental

Resultado: a , b , d , c . Esperado: a , b , c , d

 const promises = [] console.log('a') someFunc(promises) Promise.allSettled(promises).then(() => console.log('d')) function someFunc(promises) { const promise = new Promise(resolve => setTimeout(() => { console.log('b') const promise2 = new Promise(resolve2 => setTimeout(() => { console.log('c') resolve2() }, 3000)) promises.push(promise2) resolve() }, 3000)) promises.push(promise) return promise }

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

0

Si bien sería posible parchearlo no empujando a una matriz, sino haciendo que cada Promesa se someFunc entre sí en alguna Función ...

 console.log('a') someFunc().then(() => console.log('d')) function someFunc() { return new Promise(resolve => setTimeout(() => { console.log('b') new Promise(resolve2 => setTimeout(() => { console.log('c') resolve2() }, 3000)) .then(resolve); }, 3000)) }

Una versión mucho más comprensible prometería setTimeout para empezar en lugar de hacerlo cada vez.

 const setTimeoutPromise = ms => new Promise(resolve => setTimeout(resolve, ms)); console.log('a') someFunc().then(() => console.log('d')) function someFunc() { return setTimeoutPromise(3000) .then(() => { console.log('b'); return setTimeoutPromise(3000) }) .then(() => { console.log('c'); return setTimeoutPromise(3000) }); }

Que se puede simplificar aún más con await ...

 const setTimeoutPromise = ms => new Promise(resolve => setTimeout(resolve, ms)); console.log('a') someFunc().then(() => console.log('d')) async function someFunc() { await setTimeoutPromise(3000); console.log('b'); await setTimeoutPromise(3000); console.log('c'); await setTimeoutPromise(3000); }

about 4 years ago · Juan Pablo Isaza Denunciar

0

Solución

Sé que puede estar confundido con esta pregunta mucho. Aquí está la solución que encontré

 const promises = [] const timeout = ms => { const promise = new Promise(resolve => setTimeout(resolve, ms)) promises.push(promise) return promise } const someFunc = () => timeout(1000).then(() => { console.log('b') timeout(1000).then(() => console.log('c')) }) async function main() { console.log('a') someFunc() let i = 0; while (promises.length > i) { i = promises.length await Promise.allSettled(promises) } console.log('d') } main()

El problema que realmente quiero expresar es que el contenido de la función someFunc no se determina en el momento de la compilación, mientras que necesito asegurarme de que la función no deje efectos secundarios una vez ejecutada.

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