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.

3voto

caiocpricci2 Punkte 7594

Ich brauchte ein besetztes Wartezimmer für Testzwecke. Ich wollte den Code nicht aufteilen, da dies eine Menge Arbeit bedeuten würde, also wurde ein einfaches pour hat es für mich getan.

for (var i=0; i<1000000; i++){                  
    // Waiting
}

Ich habe darin keinen Nachteil gesehen, und es hat bei mir funktioniert.

3voto

Rodrigo Punkte 4161

Für den Fall, dass Sie wirklich ein sleep() benötigen, um etwas zu testen. Seien Sie sich aber bewusst, dass es den Browser beim Debuggen meistens zum Absturz bringt - wahrscheinlich brauchen Sie es deshalb sowieso. Im Produktionsmodus werde ich diese Funktion auskommentieren.

function pauseBrowser(millis) {
    var date = Date.now();
    var curDate = null;
    do {
        curDate = Date.now();
    } while (curDate-date < millis);
}

Verwenden Sie new Date() nicht in der Schleife, es sei denn, Sie wollen Speicher, Rechenleistung, Batterie und möglicherweise die Lebensdauer Ihres Geräts verschwenden.

3voto

ForeverLearner Punkte 1583

Dies ist eine blockierende Version des Schlafs. Fand es einfacher zu folgen während Testaktivitäten wo Sie eine sequentielle Ausführung benötigen. Sie kann aufgerufen werden wie sleep(2000) um den Thread für 2 Sekunden schlafen zu legen.

function sleep(ms) {
    const now = Date.now();
    const limit = now + ms;
    let execute = true;
    while (execute) {
        if (limit < Date.now()) {
            execute = false;
        }
    }
    return;
  }

3voto

Riccardo Persiani Punkte 592

Ich bevorzuge dies funktionaler Stil Einzeiler sleep Funktion:

const sleep = (ms) => new Promise((res) => setTimeout(res, ms, ms));

// usage
async function main() {
  console.log("before");
  const t = await sleep(10_000); /* 10 sec */
  console.log("after " + t);
}
main();

2voto

Ivan Punkte 3867

Eine Funktion zum Einschlafen, die einen synchronen Aufruf verwendet, damit das Betriebssystem dies tun kann. Verwenden Sie jeden beliebigen Schlafbefehl des Betriebssystems, den Sie möchten. Es handelt sich nicht um ein Warten im Sinne der Nutzung von CPU-Zeit.

Ich habe ping auf eine nicht existierende Adresse gewählt.

const cp = require('child_process');

function sleep(ms)
{
    try{cp.execSync('ping 192.0.2.0 -n 1 -w '+ms);}
    catch(err){}
}

Ein Test, um zu überprüfen, ob es funktioniert

console.log(Date.now());
console.log(Date.now());
sleep(10000);
console.log(Date.now());
console.log(Date.now());

Und einige Testergebnisse.

1491575275136
1491575275157

(und nach 10 Sekunden)

1491575285075
1491575285076

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