/ Se imprimió el resultado. Pero no entiendo por qué muestra [[PromiseState]]: "rechazado", debería "cumplirse", ¿cuál fue el error que cometí en el código? /
let counterElement = document.querySelector(".counter"); const promiseCheck = new Promise((resolve, reject) => { let Timer = setInterval(() => { var runner = parseInt(document.querySelector(".counter").innerText); counterElement.innerText = runner - 1; if (runner === 0) { clearInterval(Timer); resolve((counterElement.innerText = "Happy Morning")); }else{ reject("wht going wrong") } // console.log(runner) }, 1000); }); console.log(promiseCheck); promiseCheck .then((data) => console.log(data)) .catch((errData) => console.log(errData)); index.html <h1 class="counter">10</h1>Puede usar requestAnimationFrame para lograr este resultado de manera limpia. Funciona como setTimeout y setInterval (que también podría emplearse en esas líneas).
const timer = document.getElementById("time"); var startTime = null; var endTime = null; function changeTimer() { if (startTime === null) { startTime = Date.now(); /* Set up the start time to be 11 seconds (11,000 ms) in the future so it displays 10 for a whole second */ endTime = startTime + 11000; requestAnimationFrame(changeTimer); return; } let nValue = Date.now(); let tValue = (nValue < endTime) ? endTime - nValue : 0; let mtValue = tValue / 1000; let mtiValue = parseInt(mtValue); if (mtiValue < 1) { timer.innerText = "Happy Morning"; return; } timer.innerText = mtiValue; requestAnimationFrame(changeTimer); return; } changeTimer(); <h1 class="counter" id="time">10</h1>