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

75
Vistas
Ordenar promesas por tiempo de ejecución

Hola hay alguna solución para ordenar promesas por tiempo de ejecución? para ex

 Promise.all([Promise // 5ms ,Promise // 3ms,Promise // 2ms])

devolverá la respuesta con el mismo orden en que se dio. ¿Hay alguna solución o método para ordenarlo por tiempo de ejecución para que tenga un retorno similar?

 Promise.all([Promise // 2ms ,Promise // 3ms,Promise // 5ms])
about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Para volver a plantear el problema claramente: dado un conjunto de promesas, ¿pueden ejecutarse simultáneamente y pueden organizarse los resultados en una matriz en orden de tiempo de ejecución?

Si el tiempo de ejecución se conoce de antemano, ordene las promesas por tiempo de ejecución y pase la matriz ordenada a Promise.all() .

Si los tiempos de ejecución se desconocen de antemano, sugeriría envolver las promesas con una pequeña función que cronometra la ejecución. Ordene el resultado de Promise.all() en esos tiempos transcurridos...

 function sortedPromiseAll(array) { const start = new Date() const instrumentPromise = p => { return p.then(result => { const now = new Date(); return { result, duration: now.getTime()-start.getTime() } }); } const instrumentedPromises = array.map(instrumentPromise) return Promise.all(instrumentedPromises).then(results => { return results.sort((a, b) => a.duration-b.duration).map(r => r.result); }) } const timedPromise = t => { return new Promise(resolve => { setTimeout(resolve, t) }) }; // imagine we don't know these timings const promiseA = timedPromise(600).then(() => 'A'); const promiseB = timedPromise(300).then(() => 'B'); const promiseC = timedPromise(900).then(() => 'C'); // expected result is B, A, C sortedPromiseAll([promiseA, promiseB, promiseC]) .then(result => console.log(result));

about 4 years ago · Santiago Trujillo Denunciar

0

Puede obtener el orden de cuándo se resuelven si inserta manualmente los resultados de cada promesa en una matriz. En este ejemplo, el valor resuelto es una cadena que muestra la marca de tiempo en que se agregó.

Los resultados se envían a la matriz de outputs cuando se resuelven. Los outputs de impresión muestran que ahora están ordenados en función de cuándo se resolvieron.

 const outputs = []; function createPromise() { return new Promise((resolve, reject) => { // adding a bit of randomness here so there is no guarantee when they resolve const delay = Math.random() * 1000; setTimeout(() => { resolve(`Promise resolved at ${Date.now()}`); }, delay); }); } function addResult() { return createPromise().then(value => { outputs.push(value); }); } Promise.all([addResult(), addResult()]).then(() => console.log(outputs));

about 4 years ago · Santiago Trujillo Denunciar

0

La forma más fácil es empujarlos a una nueva matriz a medida que ingresan. No es necesario crear promesas adicionales, solo tiene que aprovechar la promesa que ya se creó.

 const getRandomPromise = () => { return new Promise(resolve => { var ms = Math.random() * 3000; window.setTimeout(()=>resolve(ms), ms); }); }; function orderPromises (promises) { const orderedPromies = []; const pushPromiseResults = promise => promise.then(result => (orderedPromies.push(result), result)) promises.forEach(pushPromiseResults); return Promise.all(promises).then(()=>orderedPromies); } const myPromises = [getRandomPromise(), getRandomPromise(), getRandomPromise()]; orderPromises(myPromises).then(x => console.log(x));

about 4 years ago · Santiago Trujillo 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