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

229
Visualizações
¿Es posible que la evaluación posterior gane en Promise.race() y Promise.all() incluso si consumen la misma cantidad de tiempo?

De acuerdo con https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all , dos evaluaciones en el siguiente código se ejecutan de forma asincrónica.

 var p2 = Promise.all([1337, "hi"]); // non-promise values will be ignored, but the evaluation will be done asynchronously

y se me ocurre una duda que, en el siguiente ejemplo:

 async function sleep(x) { await new Promise((resolve) => setTimeout(resolve, x)) } async function test(x) { await sleep(1000); return x } async function run(){ let promises = [] promises.push(test(1)) promises.push(test(2)) let res = await Promise.race(promises) console.log(res) } run() // I ran it for several times, and it always give me 1

Dado que estas dos evaluaciones se ejecutaron de forma asíncrona y consumen la misma cantidad de tiempo, ¿es posible que este programa me dé 2 en algunos casos?

Lo que no entiendo es:

  • ¿Por qué este programa siempre me da 1? Si varias evaluaciones consumen la misma cantidad de tiempo, ¿javascript promete que la anterior siempre terminará antes?
  • ¿El cambio de contexto de hilo ocurre en Promise.all ()? Probé otro código de ejemplo de subprocesos múltiples y siempre me da 100.
 let a = 0 async function test1() { a++; } async function run(){ let promises = [] for (let i=0;i<100;i++){ promises.push(test1()) } await Promise.all(promises) console.log(a) } run() // It always give me 100

Parece que nunca viola la atomicidad, ¿por qué?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

No. Cómo funciona el bucle de eventos en javascript, colocará dos devoluciones de llamada de tiempo de espera en una "cola de tiempo de espera" y debido a que ambos tiempos de espera tienen el mismo retraso de tiempo de espera (1000), sus devoluciones de llamada se ejecutarán en el orden en que aparecen en el "tiempo de espera cola". Primero "1", luego "2".

about 4 years ago · Juan Pablo Isaza Relatório

0

¿Por qué este programa siempre me da 1? Si varias evaluaciones consumen la misma cantidad de tiempo, ¿javascript promete que la anterior siempre terminará antes?

La otra respuesta respondió esto: los tiempos de espera se resuelven en el orden en que se colocan en la cola. La fecha límite de tiempo de espera para la promesa 2 siempre es necesariamente posterior a la de la promesa 1 de todos modos, ya que habrá pasado algún tiempo entre promises.push(test(1)) y promises.push(test(2)) .

La segunda pregunta:

¿El cambio de contexto de hilo ocurre en Promise.all ()? Probé otro código de ejemplo de subprocesos múltiples y siempre me da 100.

No, no probó los subprocesos múltiples porque no hay subprocesos múltiples en JavaScript normal.

Una función async es síncrona hasta que la primera await en ella (y endulza su valor de retorno para envolverlo en una promesa), por lo que

 async function test1() { a++; // implicit return undefined; }

es equivalente a

 function test1() { a++; return Promise.resolve(undefined); }

Esto significa que

 async function run() { let promises = [] for (let i = 0; i < 100; i++) { promises.push(test1()) } await Promise.all(promises) console.log(a) }

es equivalente a

 async function run() { let promises = [] for (let i = 0; i < 100; i++) { a++; promises.push(Promise.resolve(undefined)); } await Promise.all(promises); console.log(a); }

que es claramente síncrono en la forma en que modifica a archivo .

about 4 years ago · Juan Pablo Isaza 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