3847 Stimmen

Was ist die JavaScript-Version von sleep()?

Gibt es einen besseren Weg zur Entwicklung einer sleep in JavaScript als die folgenden pausecomp Funktion ( entnommen von hier )?

function pausecomp(millis)
{
    var date = new Date();
    var curDate = null;
    do { curDate = new Date(); }
    while(curDate-date < millis);
}

Es handelt sich nicht um ein Duplikat von Sleep in JavaScript - Verzögerung zwischen Aktionen Ich möchte eine echter Schlaf in der Mitte einer Funktion und nicht eine Verzögerung, bevor ein Teil des Codes ausgeführt wird.

178voto

chaos Punkte 118918

Um der Liebe von $DEITY willen machen Sie bitte keine busy-wait sleep Funktion. setTimeout y setInterval alles tun, was Sie brauchen.

var showHide = document.getElementById('showHide');
setInterval(() => {
    showHide.style.visibility = "initial";
    setTimeout(() => {
        showHide.style.visibility = "hidden"
    }, 1000);
    ;
}, 2000);   

<div id="showHide">Hello! Goodbye!</div>

Alle zwei Sekunden wird der Text für eine Sekunde ausgeblendet. Dies zeigt, wie man setInterval und setTimeout verwendet, um Text jede Sekunde ein- und auszublenden.

115voto

mjaggard Punkte 2155

Wenn Sie (wie ich) JavaScript mit Nashorn können Sie...

try
{
  java.lang.Thread.sleep(timeInMilliseconds);
}
catch (e)
{
  /*
   * This will happen if the sleep is woken up - you might want to check
   * if enough time has passed and sleep again if not - depending on how
   * important the sleep time is to you.
   */
}

80voto

Ahmed Mohammedali Punkte 380

Verwendung:

  await new Promise(resolve => setTimeout(resolve, 2000));

Stellen Sie sicher, dass Ihre aufrufende Funktion asynchron ist. Dies wurde überprüft und funktioniert einwandfrei.

75voto

Alan Plum Punkte 10604

Wenn Sie jQuery verwenden, hat jemand tatsächlich ein "Delay"-Plugin erstellt, das nichts weiter als ein Wrapper für setTimeout ist:

// Delay Plugin for jQuery
// - http://www.evanbot.com
// - © 2008 Evan Byrne

jQuery.fn.delay = function(time,func){
    this.each(function(){
        setTimeout(func,time);
    });

    return this;
};

Sie können sie dann einfach wie erwartet in einer Reihe von Funktionsaufrufen verwenden:

$('#warning')
.addClass('highlight')
.delay(1000)
.removeClass('highlight');

58voto

Mir-Ismaili Punkte 10534

Ab April 2021 ( Node.js 16+ ), eine neue versprochene Version von setTimeout() ist verfügbar:

import { setTimeout } from 'timers/promises'

const res = await setTimeout(2000, 'result')

console.log(res);  // Prints 'result'

Danke @kigiri . Siehe die offizielle Dokumentation: https://nodejs.org/api/timers.html#timerspromisessettimeoutdelay-value-options

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X