Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

117
Vistas
¿Dónde dice en ECMAScript que la promesa resuelta tiene [[PromiseResult]] igual al objeto?

Estoy tratando de hacer coincidir el funcionamiento de la función de resolve de una promesa con el procedimiento correspondiente en la especificación ECMAScript. Más específicamente, estoy buscando la especificación en el caso de que se llame a la función de resolución con un valor de objeto.

Toma estos ejemplos:

 new Promise((resolve) => { resolve("hello"); }); new Promise((resolve) => { resolve({a: 100}); });

Hay una diferencia entre estas dos promesas: el tipo de valor pasado a la función de resolve .

Este es el procedimiento para la función de resolución de la especificación ECMAScript :

  1. Sea F el objeto de la función activa.

  2. Afirmar: F tiene una [[Promesa]] ranura interna cuyo valor es un Objeto.

  3. Sea promesa F .[[Promesa]].

  4. Sea yaResuelto F .[[YaResuelto]].

  5. Si yaResuelto .[[Valor]] es verdadero , devuelve undefined .

  6. Establezca yaResuelto .[[Valor]] en verdadero .

  7. Si SameValue( resolución , promesa ) es verdadero , entonces

    una. Deje que selfResolutionError sea un objeto TypeError recién creado.

    b. Devuelve RejectPromise( promise , selfResolutionError ).

  8. Si Tipo (resolución) no es Objeto, entonces

    una. Devuelve FulfillPromise ( promesa , resolución ).

  9. Sea entonces Get( resolución , "entonces" ).

  10. Si entonces es una finalización abrupta, entonces

    una. Devuelve RejectPromise( promise , luego .[[Valor]]).

  11. Sea entoncesAcción entonces .[[Valor]].

  12. Si IsCallable( thenAction ) es falso , entonces

    una. Devuelve FulfillPromise ( promesa , resolución ).

  13. Deje que thenJobCallback sea HostMakeJobCallback( thenAction ).

  14. Deje que el trabajo sea NewPromiseResolveThenableJob ( promesa , resolución , luego JobCallback ).

  15. Ejecute HostEnqueuePromiseJob( trabajo .[[Trabajo]], trabajo .[[Reino]]).

  16. Devolver indefinido .

No puedo precisar dónde se trata el caso que tiene un objeto como argumento sin una propiedad then .

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El paso 9 obtiene la propiedad then

  1. Sea entonces Get( resolución , "entonces" ).

Hay principalmente cuatro resultados posibles:

  1. then no es una propiedad del objeto, entonces (la variable) representa un registro de finalización con [[Valor]] undefined
  2. then es una propiedad del objeto, pero evaluarlo produce una excepción (por ejemplo, es un captador y el captador se encuentra con una excepción). entonces es entonces una llamada terminación abrupta .
  3. then es una propiedad del objeto, pero no es una función
  4. then es una propiedad del objeto, y es una función.

El paso 10 busca uno de estos resultados:

  1. Si entonces es una finalización abrupta, entonces
    una. Devuelve RejectPromise( promise , luego .[[Valor]]).

Aquí hay un fragmento que hace que 10.a suceda:

 let obj = { get then() { throw "sorry"; } }; new Promise(resolve => resolve(obj)) .catch((err) => console.log("rejected with ", err))

Esto representa el caso en el que then no necesariamente tiene la intención de evaluar como una función (es un captador, por lo que el código debe ejecutarse para determinar eso), pero acceder a él hace que sea imposible saber si sería una función o no, ya que produce una excepción. La especificación menciona la ejecución del getter en [[Get]]

El paso 11 es una simple asignación del campo [[Value]] del registro de finalización recuperado (tenga en cuenta que también hay otros campos, como [[Type]] )

  1. Sea entoncesAcción entonces .[[Valor]].

El paso 12 comprueba si este valor es una función:

  1. Si IsCallable( thenAction ) es falso , entonces
    una. Devuelve FulfillPromise ( promesa , resolución ).

Si no es una función, la promesa principal se cumple con ese objeto como valor.

Los pasos restantes se ocupan del caso donde entonces es una función.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda