En el siguiente código, lo que busco es recibir la alerta, después de que finalice el conteo en setInterval. Sin embargo, la alerta se muestra primero y luego ocurre el conteo. ¿Qué he hecho mal?
function function1() { return new Promise((resolve, reject) => { console.log('in function1 ') function2().then(resolve()); }); } function function2() { return new Promise((resolve, reject) => { var x = 0; I = setInterval(function() { console.log(x); if (x > 10) { clearInterval(I); resolve() }; x++ }, 100); }); } function1().then(alert('finished'));El primer argumento de Promise#then :
onFulfilled : una función llamada si se cumple la promesa. Esta función tiene un argumento, el valor de cumplimiento. Si no es una función, se reemplaza internamente con una función de "Identidad" (devuelve el argumento recibido).
Puede pasar un nombre de función o una función como se muestra a continuación:
function function1() { return new Promise((resolve, reject) => { console.log('in function1 ') function2().then(resolve); // onFulfilled }); } function function2() { return new Promise((resolve, reject) => { var x = 0; I = setInterval(function() { console.log(x); if (x > 10) { clearInterval(I); resolve() }; x++ }, 100); }); } function1().then(() => alert('finished')); // onFulfilled