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

205
Visualizações
¿Se pasa la función de resolución al ejecutor Promise asíncrono?

Tengo el siguiente código:

 function myPromiseFunc() { return new Promise((resolve) => { resolve(Promise.resolve(123)); }); }

Como sabemos, el método Promise.resolve resuelve Promise con un valor simple de inmediato. Así que Promise.resolve(123) -> Promise<fulfilled> Pero:

 console.log(myPromiseFunc());

devolverá Promesa con estado pending . ¿Por qué? ¿Se pasa la función de resolución al ejecutor asíncrono? Porque esto:

 setTimeout(console.log, 0, res);

devolverá Promise<fulfilled> .

Sé que Promises usa microtareas, pero se supone que debe usarse solo para controladores.

Promesas/A+ dice:

[[Resolver]](promesa, x) -> If/when x is a promise and fulfilled, fulfill promise with the same value.

De paso. Este recorte devolverá Promise<fulfilled> :

 function myPromiseFunc() { return new Promise((resolve) => { resolve(123); }); }

Por lo tanto, parece que resolve es asíncrono solo cuando Promise se pasa como valor.

Por favor, ayuda a entender. ¡Gracias!

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

0

De acuerdo con la especificación de la función de resolve pasada al ejecutor en la new Promise((resolve, reject) => ...) :

Cuando se llama a una función de resolución de promesa con resolution de argumento, se toman los siguientes pasos:

  1. Sea F el objeto de la función activa.
  2. Afirmar: F tiene una [[Promise]] ranura interna cuyo valor es un Objeto.
  3. Sea promise F.[[Promise]] .
  4. Sea alreadyResolved F.[[AlreadyResolved]] .
  5. Si alreadyResolved.[[Value]] es true , devuelve undefined .
  6. Establezca alreadyResolved.[[Value]] en true .
  7. Si SameValue(resolution, promise) es true , entonces
    1. Deje que selfResolutionError sea un objeto TypeError recién creado.
    2. Devuelve RejectPromise(promise, selfResolutionError) .
  8. Si Type(resolution) no es Objeto, entonces
    1. Devuelve FulfillPromise(promise, resolution) .
  9. Sea then Get(resolution, "then") .
  10. Si then es una finalización abrupta, entonces
    1. Devuelve RejectPromise(promise, then.[[Value]]) .
  11. Sea thenAction then.[[Value]] .
  12. Si IsCallable(thenAction) es false , entonces
    1. Devuelve FulfillPromise(promise, resolution) .
  13. Deje que thenJobCallback sea HostMakeJobCallback(thenAction) .
  14. Deje que job sea NewPromiseResolveThenableJob(promise, resolution, thenJobCallback) .
  15. Ejecute HostEnqueuePromiseJob(job.[[Job]], job.[[Realm]]) .
  16. Devolver undefined .

Mucha jerga técnica, pero lo más importante para su pregunta es que la resolution es el valor que le pasó. Si es (más o menos) una no promesa, terminará en 8.1 (para no objetos) o 12.1 (para objetos no invocables), que cumplirán inmediatamente la promesa. Si pasó un valor con una función then (por ejemplo, una Promesa), hará todos los pasos a partir de 13 donde básicamente pone en cola el .then y sigue todo "mi cumplimiento depende del cumplimiento de otra Promesa".

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