Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

67
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda