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

115
Visualizações
Promise no se ejecuta de forma asíncrona

He estado probando promesas en node.js en el siguiente programa:

 const areallylongprocesspromise = new Promise((resolve, reject) => { let buff = 0; for (let i = 0; i < 1000000000; i++) { if ((i % 73829) === 0) buff++; } if (buff > 10) resolve(buff); else reject(buff); }); areallylongprocesspromise.then((resolved) => { console.log("Resolved: ", resolved); }) .catch((rejected) => { console.log("Rejected: ", rejected); }); console.log("Waiting for execution to finish up");

La salida esperada es:

 Waiting for execution to finish up Resolved: 13545

Sin embargo, la primera declaración, "esperando... arriba" no se registra hasta que la promesa termina de ejecutarse, momento en el cual ambas declaraciones se registran simultáneamente. Soy nuevo en el concepto de promesas, así que no sé qué está pasando aquí. ¿Por qué la promesa retrasa la ejecución del resto del código? Cualquier ayuda sería apreciada.

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

0

El código dentro de la Promesa no se ejecuta cuando llama a .then , se ejecuta cuando define la Promesa en sí misma; intente registrar algo al comienzo de la función:

 const areallylongprocesspromise = new Promise((resolve, reject) => { console.log('start'); ... });

Dado que su código es síncrono, mantiene la ejecución del código por definición.

about 4 years ago · Juan Pablo Isaza Relatório

0

Eso sucede porque NodeJS y Javascript, a pesar de permitir llamadas asincrónicas de E/S, forman aplicaciones de un solo subproceso.

Significa que cuando la CPU está computando

 for (let i = 0; i < 1000000000; i++) { if ((i % 73829) === 0) buff++; }

No hace nada más.

Si usa, por ejemplo, setTimeout , funciona como se esperaba porque crea un temporizador asíncrono que funciona como una operación de E/S.

 const areallylongprocesspromise = new Promise((resolve, reject) => { let buff = 0; for (let i = 0; i < 1000000000; i++) { if ((i % 73829) === 0) buff++; } setTimeout(()=> { if (buff > 10) resolve(buff); else reject(buff); }, 1000) }); areallylongprocesspromise.then((resolved) => { console.log("Resolved: ", resolved); }) .catch((rejected) => { console.log("Rejected: ", rejected); }); console.log("Waiting for execution to finish up");

Este temporizador es inútil aquí, solo para mostrarle cómo funcionan las llamadas asincrónicas de E/S. Ese temporizador podría representar, por ejemplo, la lectura de un archivo, la conexión a una base de datos o la obtención de una imagen de Internet, todas son operaciones de E/S.

Esa es la magia de NodeJS, a pesar de ser de un solo subproceso, no bloquea el código para las operaciones de E/S.

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