Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

122
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!