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

329
Visualizações
Si se encuentra una Promesa vacía dentro de un ciclo while infinito, ¿por qué el ciclo while se resuelve con una Promesa pendiente?

Si hago una Promesa que nunca se cumple:

const nothingPromise = new Promise((resolve) => {});

Y luego await esa Promesa dentro de un ciclo while infinito:

async function run() { while (true) { await nothingPromise;}}

Cualquier función then() adjunta a la función no se ejecutará, pero tampoco obtengo un bucle infinito. Me sale una Promesa pendiente. En la consola de Chrome:

run().then(() => console.log('then')) Promise {<pending>}

¿Por qué se devuelve una Promesa pendiente? Tengo la sensación de que tiene algo que ver con esta parte de la especificación ECMAScript:

La operación abstracta LoopContinues toma la finalización de argumentos y labelSet y devuelve un valor booleano. Realiza los siguientes pasos cuando se le llama:

  1. Si finalización.[[Tipo]] es normal, devuelve verdadero.
  2. Si la finalización. [[Tipo]] no continúa, devuelve falso.
  3. Si finalización.[[Objetivo]] está vacío, devuelve verdadero.
  4. Si finalización.[[Target]] es un elemento de labelSet, devuelve verdadero.
  5. Falso retorno.

Pero no sé qué condición de finalización corresponde a await nothingPromise .

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

0

await envía la función en la que se encuentra a dormir hasta que:

  • La promesa resuelve y
  • El bucle del evento principal es gratuito.

Así que comienza el ciclo while , se await la promesa y la función que llama a run() recibe la promesa devuelta por run (que está pendiente porque run está inactiva) y continúa.


Dado que nothingPromise nunca se resuelve, la función de run nunca se activa, por lo que nunca se completa y nunca resuelve la promesa que devuelve.


La parte de la especificación que encontró es irrelevante ya que await envía run a dormir en medio de la primera iteración del ciclo, por lo que el ciclo nunca llega a completarse.

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