有没有一种简单的方法可以在Javascript中暂停脚本?我正在寻找Python中time.sleep(1)
的javascript等价物。我不希望setTimeout(continueExecution, 10)
或任何getTime
的内容。可以这样做吗?
编辑:这不是那么容易,但我想我可以用setTimeout
答案 0 :(得分:17)
JavaScript通常使用事件循环在单个线程中运行。这就是为什么你不能做任何“Thread.sleep”。如果可能,它会冻结其他一切,并相信我你不想那样做。这就是为什么JavaScript中的几乎所有内容都使用非阻塞IO运行的原因,这就是为什么延迟执行的唯一方法是使用setTimeout或setInterval。
答案 1 :(得分:7)
没有setTimeout,您可以随时循环,直到达到所需的日期时间:
免责声明: 这是未经测试的。 由于javascript是单线程的,因此在循环时会冻结整个浏览器。有关此主题的更多信息,请参阅other questions。
var delay = 5; // 5 second delay
var now = new Date();
var desiredTime = new Date().setSeconds(now.getSeconds() + delay);
while (now < desiredTime) {
now = new Date(); // update the current time
}
// continue execution
答案 2 :(得分:2)
如果你使用的是jQuery 1.5+,你可以制作一个非常简单的插件(i
(function($) {
$.wait = function(time) {
return $.Deferred(function(dfd) {
setTimeout(dfd.resolve, time); // use setTimeout internally.
}).promise();
}
}(jQuery));
然后像这样使用它:
$.wait(3000).then(function(){
....
});
等待3秒后它会启动你的功能。它在内部使用setTimeout,但这是在JavaScript中执行此操作的唯一方法。
答案 3 :(得分:1)
您可以使用以下代码:(来自http://www.phpied.com/sleep-in-javascript/)
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds){
break;
}
}
}
这实际上会阻止脚本执行,无论你想要多少毫秒。除非您尝试模拟需要很长时间的任务,否则不要使用它。
答案 4 :(得分:1)
我们有一个名为sleep的npm包,你可以看到它here
并简单地使用它
var sleep = require('sleep');
sleep.sleep(10) //sleep for 10 seconds
但要注意这个
这些调用将通过暂停Node.js的事件循环来阻止所有JavaScript的执行!
如果您希望睡眠有承诺,可以使用then-sleep npm包这是一个不错的选择
var sleep = require('then-sleep');
// Sleep for 1 second and do something then.
sleep(1000).then(...);
如果您使用ES7
,也可以使用es7-sleep npm package
答案 5 :(得分:0)
你做这样的事情
// place you code in this function
(async function main(){
//Do something
console.log("something Done first ")
// code execution will halt for period (ms)
await sleep(3000)
console.log("something Done 3 seconds later ")
//Do something
})()
function sleep(period) {
return new Promise(resolve => {
setTimeout(() => {
resolve();
}, period);
});
}
答案 6 :(得分:0)
如果您使用9.3或更高版本的节点,则可以使用Atomics.wait()
这样的
function msleep(n) {
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, n);
}
function sleep(n) {
msleep(n*1000);
}
现在您可以致电sleep()