¿Se requiere setTimeout?
Tengo una pregunta para sincronizar, esperar y configurar Timeout (). Pensé, uso funciones asincrónicas para procesos lentos. Así que lo probé con un bucle grande. En mi computadora, se necesitan unos segundos para ejecutar el siguiente código:
function slowFunction() {
return new Promise(resolve => {
setTimeout(() => {
for (let i = 0; i < 4000000000; i++) {};
resolve('Ready at ' + new Date().toLocaleTimeString('de'));
}, 0);
});
};
console.log('Start: ' + new Date().toLocaleTimeString('de'));
(async () => {
console.log('Call slow function.');
console.log(await slowFunction());
})();
console.log('There is no need to wait for the slow function: ' + new Date().toLocaleTimeString('de'));
La salida es:
Start: 16:39:20
Call slow function.
There is no need to wait for the slow function: 16:39:20
Ready at 16:39:23
Y ahora la pregunta: ¿Cuál es la diferencia con el siguiente código:
function slowFunction() {
return new Promise(resolve => {
for (let i = 0; i < 4000000000; i++) {};
resolve('Ready at ' + new Date().toLocaleTimeString('de'));
});
};
console.log('Start: ' + new Date().toLocaleTimeString('de'));
(async () => {
console.log('Call slow function.');
console.log(await slowFunction());
})();
console.log('There is no need to wait for the slow function: ' + new Date().toLocaleTimeString('de'));
La salida es:
Start: 16:39:20
Call slow function.
There is no need to wait for the slow function: 16:39:23
Ready at 16:39:23
Por el primer ejemplo, parece asíncrono. En el segundo ejemplo, la función espera el final del ciclo.
¿Tengo que usar setTimeout o tengo un error en el código o me estoy equivocando? En ambos casos, la declaración de resolución está detrás del bucle grande.
La mayoría de los ejemplos para async y aguardan setTimeout usados, pero creo que es solo para simular un descanso.
Gracias por su ayuda por adelantado.
Best saluda a Pascal