Auf der Serverseite können Sie mit der deasync sleep()
Methode, die von Haus aus implementiert ist in C damit sie eine wirksame Umsetzung eines warten Wirkung, ohne die Ereignisschleife oder die CPU zu 100 % auszulasten.
Exemple :
#!/usr/bin/env node
// Requires `npm install --save deasync`
var sleep = require("deasync").sleep;
sleep(5000);
console.log ("Hello World!!");
Aber wenn Sie eine rein JavaScript-Funktion (z. B. um sie auf der Client-Seite eines Browsers auszuführen), muss ich leider sagen, dass ich glaube, dass Ihre pausecomp()
Funktion ist der einzige Weg, sich dem Thema zu nähern, und mehr als das:
-
Dadurch wird nicht nur Ihre Funktion, sondern die gesamte Ereignisschleife unterbrochen. Es werden also keine anderen Ereignisse bedient.
-
Dadurch wird Ihre CPU zu 100 % ausgelastet.
Wenn Sie es also für ein Browserskript brauchen und diese schrecklichen Effekte nicht wollen, müssen Sie Ihre Funktion in gewisser Weise neu überdenken:
a). Sie können es abrufen (oder a do_the_rest()
Funktion) bei einer Zeitüberschreitung. Der einfachere Weg, wenn Sie kein Ergebnis von Ihrer Funktion erwarten.
b). Oder, wenn Sie auf ein Ergebnis warten müssen, dann sollten Sie auf Versprechen umsteigen (oder eine Callback-Hölle, natürlich ;-)).
Kein Ergebnis erwartet Beispiel:
function myFunc() {
console.log ("Do some things");
setTimeout(function doTheRest(){
console.log ("Do more things...");
}, 5000);
// Returns undefined.
};
myFunc();
Ein Beispiel, bei dem ein Versprechen zurückgegeben wird (beachten Sie, dass sich dadurch die Verwendung der Funktion ändert):
function myFunc(someString) {
return new Promise(function(resolve, reject) {
var result = [someString];
result.push("Do some things");
setTimeout(function(){
result.push("Do more things...");
resolve(result.join("\n"));
}, 5000);
});
};
// But notice that this approach affect to the function usage...
// (It returns a promise, not actual data):
myFunc("Hello!!").then(function(data){
console.log(data);
}).catch(function(err){
console.error(err);
});