Cuando ejecuto un ejemplo que encontré en Internet que usa setTimeout, funciona bien. Pero cuando reemplazo setTimeout con un bucle for de ejecución prolongada, la salida aparece después de un retraso. ¿Tenemos que usar una función asíncrona hecha en fábrica todo el tiempo?
Codigo original:
const doSomethingAsync = () => { return new Promise(resolve => { setTimeout(() => resolve('I did something'), 3000)}) } const doSomething = async () => { console.log(await doSomethingAsync()) } console.log('Before') doSomething() console.log('After')Código con retraso personalizado:
const doSomethingAsync = () => { return new Promise(resolve => { for(let i=0;i<4000000000;i++){} resolve("I did something!"); }) } const doSomething = async () => { console.log(await doSomethingAsync()) } console.log('Before') doSomething() console.log('After')Cuando se ejecuta el código personalizado, la salida de After ocurre después del retraso, mientras que en el código original After aparece inmediatamente.
Editar: Por cierto, la pregunta en ¿Por qué la función asíncrona de Javascript no regresa de inmediato? es similar pero el orden no cambia en mi caso, el tiempo sí.