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

102
Vistas
Resolución de promesas complejas en serie y en paralelo

Así que tengo esta función que hace 4 cosas, que deben secuenciarse de la siguiente manera:

 - promise1 - promiseAfter1 // In parallel - promise2 - promiseAfter2

Para obtener las promesas en serie escribiré:

 async sequence1() { const result = await promise1(); const finalResult = await promiseAfter1(result); } async sequence2() { const result = await promise2(); const finalResult = await promiseAfter2(result); }

Y entonces:

 async finalSequence() { await Promise.all([sequence1, sequence2]); }

Pero para lograr esto, tuve que crear dos subfunciones ( sequence1 y sequence2 ) que me gustaría evitar para la legibilidad del código, entre otras razones.

¿Hay alguna manera de lograr el mismo resultado sin tener que crear dos subfunciones?

¿No debería haber algo como Promise.sequence que resuelva secuencialmente las promesas?

Esto escribiría:

 Promise.all([ Promise.sequence([promise1, promiseAfter1]), Promise.sequence([promise2, promiseAfter2]), ])

Salud

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

0

Pero para lograr esto, tuve que crear dos subfunciones ( sequence1 y sequence2 ) que me gustaría evitar para la legibilidad del código, entre otras razones.

Diría que es más legible con esas funciones, en lugar de menos, siempre que les dé nombres significativos. Pero es una cuestión de opinión.

¿No debería haber algo como Promise.sequence que resuelva secuencialmente las promesas?

No, realmente no; no encaja con los otros combinadores de promesas ( Promise.all , etc.). Lo que pasa con los combinadores de promesas es que funcionan con promesas , pero su Promise.sequence necesitaría trabajar con funciones en su lugar. Recuerde que Promise.all , etc., no hace que suceda nada que no hubiera sucedido ya, solo observa y combina los resultados de las cosas que se completan. Para eso están las promesas: Observar los resultados de los procesos asincrónicos.

Sin embargo, hay algo incorporado para hacer las cosas en secuencia, algo que toma funciones: then

 async finalSequence() { await Promise.all([ promise1().then(promiseAfter1), promise2().then(promiseAfter2), ]); }

O si no desea pasar los resultados de uno a otro, puede usar funciones en línea:

 // Either async finalSequence() { await Promise.all([ promise1().then(() => promiseAfter1()), promise2().then(() => promiseAfter2()), ]); } // Or async finalSequence() { await Promise.all([ (async () => { await promise1(); await promiseAfter1(); })(), (async () => { await promise2(); await promiseAfter2(); })(), ]); }

(Esos difieren ligeramente en términos de lo que termina en la matriz de Promise.all , pero no está usando esa matriz, así que...)

Pero si desea escribir una sequence (por ejemplo, suponiendo que las funciones se deben llamar sin argumentos) para colocarla en su biblioteca de utilidades estándar (todos tenemos una, ¿no? :-)), es fácil de hacer:

 async function sequence(functions) { for (const fn of functions) { await fn(); } }

Entonces, como dices, finalSequence sería:

 async finalSequence() { await Promise.all([ sequence(promise1, promiseAfter1), sequence(promise2, promiseAfter2), ]); }
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