¿Alguien puede explicar por qué la Promesa regresa pendiente en la primera función, pero resuelta en las otras dos? Cuando leo MDN, dice que solo usar la palabra asíncrono no hará que el código interno sea asíncrono (también debemos usar la palabra esperar). Además, devuelvo la promesa explícitamente, ya que uso resolve() (que debería devolver la promesa cumplida como en otras dos funciones, pero devuelve Pendiente en la primera función). Proporcioné el código a continuación.
const testFunc = async() => { return new Promise((resolve,reject)=> { resolve() }) } const testFunc2 = () => { return new Promise((resolve,reject)=> { resolve() }) } const testFunc3 = () => { return new Promise((resolve,reject)=> { resolve() }) } testFunc().then(()=> console.log("Hello")).then(()=> console.log("there")).then(()=> console.log("Obi One")) testFunc2().then(()=> console.log(1)).then(()=> console.log(2)).then(()=> console.log(3)) testFunc3().then(()=> console.log(4)).then(()=> console.log(5)).then(()=> console.log(6)) console.log(testFunc()) console.log(testFunc2()) console.log(testFunc3()) // Results in the console: // Promise {<pending>} // Promise {<fulfilled>: undefined} // Promise {<fulfilled>: undefined} // 1 // 4 // 2 // 5 // Hello // 3 // 6 // thereEso es porque testFunc (la función con la palabra clave asíncrona) es un evento igual a esto:
const testFunc = () => { return new Promise((resolve,reject)=> { resolve(new Promise((r) => { r() })) }) }y no
const testFunc = () => { return new Promise((resolve,reject)=> { resolve() }) }El uso de colas asíncronas pone al ejecutor como una microtarea.
Lea sobre esto aquí: https://whistlr.info/2021/async-and-tasks/
El punto clave:
Cuando escribe una función asíncrona, obliga a la persona que llama a usar una microtarea para leer su resultado. Este es el caso incluso si no espera dentro de él; devolverá una Promesa independientemente