Estoy aprendiendo sobre promesas, setTimeout y llamadas asíncronas y he hecho un gran trabajo al confundirme. Creo que me falta algo de comprensión sobre la devolución de llamada y cómo funciona setTimeout. He estado mirando la documentación de Mozilla y las diversas publicaciones de Stackoverflow sobre estos temas. Todavía tengo problemas para entender por qué algunas de las funciones que he creado se comportan de la manera en que lo hacen con respecto a los tiempos de espera establecidos.
Entre wait0 y wait1 No entiendo por qué el tiempo de espera para wait0 funciona correctamente y wait1 no se adhiere a él. Con wait2 es como wait1 excepto envuelto en una expresión de función de flecha. ¿Por qué eso hace que el tiempo de espera funcione correctamente? wait3 en realidad no está usando la devolución de llamada, por lo que tiene sentido por qué la promise y then las funciones no hacen nada. Pero detiene la ejecución de wait4 . ¿Está bloqueando la progresión indefinidamente o realmente terminando la ejecución? Para wait4 , tampoco estoy pasando un valor a la devolución de llamada como con wait0 pero no se cumple el tiempo de espera.
function wait0() { return new Promise((resolve, failure)=>{ setTimeout(resolve, 2000); }); } function wait1() { return new Promise((resolve, failure)=>{ setTimeout(resolve('resolved ' + new Date().toGMTString()), 2000); }); } function wait2() { return new Promise((resolve, failure)=>{ setTimeout(()=>{ resolve('resolved ' + new Date().toGMTString()); }, 2000); }); } function wait3() { return new Promise((resolve, failure)=>{ setTimeout(()=>{}, 2000); }); } function wait4() { return new Promise((resolve, failure)=>{ setTimeout(resolve(), 2000); }); } async function test() { await wait0().then((result)=>console.log(result)); // Works as expected console.log(new Date().toGMTString()); await wait1().then((result)=>console.log(result)); // Doesn't adhere to timeout console.log(new Date().toGMTString()); await wait2().then((result)=>console.log(result)); // Works as expected console.log(new Date().toGMTString()); await wait3().then((result)=>console.log(result)); // Never resolves console.log(new Date().toGMTString()); await wait4().then((result)=>console.log(result)); // Doesn't adhere to timeout console.log(new Date().toGMTString()); } test();