Cuando ejecuto este código:
class Thenable { constructor(num) { this.num = num; } then(resolve, reject) { console.log(resolve); setTimeout(() => resolve(this.num * 4), 1000); } }; async function f() { let result = await new Thenable(1); //then() method is called automatically console.log(result); } f();
Me di cuenta de que el método then() se llama sin una llamada explícita.
Me sorprendió, porque pensé que cuando javascript cumple con la espera, automáticamente devuelve el valor resuelto dentro de la función ejecutora como en este código:
async function f() { let promise = new Promise((resolve, reject) => { this.num = 1; console.log('this.num = ' + this.num); setTimeout(() => resolve(this.num * 4), 1000) }); let result = await promise; //just assigns resolved value inside executor function into result variable console.log(result+'!'); } f();
Dado que Promise es Thenable, las preguntas son:
-¿Cómo funciona bajo el capó en caso de que Promise se use con await?
- ¿Javascript llama entonces () al método de Promise automáticamente cuando se encuentra en espera?
- ¿O javascript distingue dos casos y procesos de manera diferente en el caso de Tenable y Promise?