Prova con questo ma non funziona:
function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms));}async function demo() { console.log('Taking a break...'); await sleep(2000); console.log('Two second later');}demo();
In me caso ho aggiunto la funzione demo al mio javascript in modo che prima sia chiuso, ma non lo fa mai e si chiude prima, il codice:
/** Represents a timer that can count down. */function CountdownTimer(seconds, tickRate) { this.seconds = seconds || (25*60); this.tickRate = tickRate || 500; // Milliseconds this.tickFunctions = ; this.isRunning = false; this.remaining = this.seconds; /** CountdownTimer starts ticking down and executes all tick functions once per tick. */ this.start = function() { if (this.isRunning) { return; } this.isRunning = true; // Set variables related to when this timer started var startTime = Date.now(), thisTimer = this; // Tick until complete or interrupted (function tick() { secondsSinceStart = ((Date.now() - startTime) / 1000) | 0; var secondsRemaining = thisTimer.remaining - secondsSinceStart; // Check if timer has been paused by user if (thisTimer.isRunning === false) { thisTimer.remaining = secondsRemaining; } else { if (secondsRemaining > 0) { // Execute another tick in tickRate milliseconds setTimeout(tick, thisTimer.tickRate); } else { // Stop this timer thisTimer.remaining = 0; thisTimer.isRunning = false; // Alert user that time is up playAlarm(); playAlarm(); changeFavicon('green'); //run again demo(); demo(); demo(); var elemento = document.getElementById('btn_shortbreak'); elemento.click(); } var timeRemaining = parseSeconds(secondsRemaining); // Execute each tickFunction in the list with thisTimer // as an argument thisTimer.tickFunctions.forEach( function(tickFunction) { tickFunction.call(this, timeRemaining.minutes, timeRemaining.seconds); }, thisTimer); } }()); }; this.close = function(){ window.close(); }; /** Pause the timer. */ this.pause = function() { this.isRunning = false; }; /** Pause the timer and reset to its original time. */ this.reset = function(seconds) { this.isRunning = false; this.seconds = seconds this.remaining = seconds }; /** Add a function to the timer's tickFunctions. */ this.onTick = function(tickFunction) { if (typeof tickFunction === 'function') { this.tickFunctions.push(tickFunction); } };}/** Return minutes and seconds from seconds. */function parseSeconds(seconds) { return { 'minutes': (seconds / 60) | 0, 'seconds': (seconds % 60) | 0 }}/** Play the selected alarm at selected volume. */function playAlarm() { var alarmValue = document.getElementById('alarm_select').value; if (alarmValue != 'none') { var alarmAudio = document.getElementById(alarmValue); var alarmVolume = document.getElementById('alarm_volume').value; alarmAudio.volume = alarmVolume / 100; alarmAudio.play(); }}function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms));}async function demo() { console.log('Taking a break...'); await sleep(10000); console.log('Two second later');}/** Change the color of the favicon. */function changeFavicon(color) { document.head = document.head || document.getElementsByTagName('head'); var color = color || 'green'; var newFavicon = document.createElement('link'), oldFavicon = document.getElementById('dynamic-favicon'); newFavicon.id = 'dynamic-favicon' newFavicon.type = 'image/ico'; newFavicon.rel = 'icon'; newFavicon.href = 'images/' + color + '_tomato.ico'; if (oldFavicon) { document.head.removeChild(oldFavicon); } document.head.appendChild(newFavicon);}/** Window onload functions. */window.onload = function () { playAlarm(); var timerDisplay = document.getElementById('timer'), customTimeInput = document.getElementById('ipt_custom'), timer = new CountdownTimer(), timeObj = parseSeconds(25*60); /** Set the time on the main clock display and set the time remaining section in the title. */ function setTimeOnAllDisplays(minutes, seconds) { if (minutes >= 60) { // Add an hours section to all displays hours = Math.floor(minutes / 60); minutes = minutes % 60; clockHours = hours + ':'; document.title = '(' + hours + 'h' + minutes + 'm) Pomodoro'; } else { clockHours = ''; document.title = '(' + minutes + 'm) Pomodoro'; } clockMinutes = minutes < 10 ? '0' + minutes : minutes; clockMinutes += ':'; clockSeconds = seconds < 10 ? '0' + seconds : seconds; timerDisplay.textContent = clockHours + clockMinutes + clockSeconds; } /** Revert the favicon to red, delete the old timer object, and start a new one. */ function resetMainTimer(seconds) { changeFavicon('red'); timer.pause(); timer = new CountdownTimer(seconds); timer.onTick(setTimeOnAllDisplays); } // Set default page timer displays setTimeOnAllDisplays(timeObj.minutes, timeObj.seconds); timer.onTick(setTimeOnAllDisplays); resetMainTimer(5*60); timer.start(); var elemento = document.getElementById('btn_shortbreak'); elemento.click() // Add listeners for start, pause, etc. buttons document.getElementById('btn_start').addEventListener( 'click', function () { timer.start(); }); document.getElementById('btn_pause').addEventListener( 'click', function () { timer.pause(); }); document.getElementById('btn_reset').addEventListener( 'click', function () { resetMainTimer(timer.seconds); timer.start(); }); document.getElementById('btn_pomodoro').addEventListener( 'click', function () { resetMainTimer(25*60); timer.start(); }); document.getElementById('btn_shortbreak').addEventListener( 'click', function () { resetMainTimer(5*60); timer.start(); window.close(); }); document.getElementById('btn_longbreak').addEventListener( 'click', function () { resetMainTimer(15*60); timer.start(); }); document.getElementById('btn_custom').addEventListener( 'click', function () { customUnits = document.getElementById('custom_units').value if (customUnits === 'minutes') { resetMainTimer(customTimeInput.value*60); } else if (customUnits === 'hours') { resetMainTimer(customTimeInput.value*3600); } else { resetMainTimer(customTimeInput.value); } timer.start(); }); // Bind keyboard shortcut for starting/pausing timer Mousetrap.bind('space', function(e) { // Remove default behavior of buttons (page scrolling) if (e.preventDefault()) { e.preventDefault(); } else { e.returnValue = false; //IE } // Pause or start the timer if(timer.isRunning) { timer.pause(); } else { timer.start(); } }); resetMainTimer(5*60); timer.start();};
alcuni Possibile modo per fare un sonno in JavaScript per mettere in pausa prima di chiudere la mia pagina usando JavaScript?