在isPaused变为true的地方,睡眠函数应该进入无限循环了吗???但是由于某种原因,它不会,而是在之后立即打印“ here2”?我正在将其与异步函数一起使用,当异步函数完成时,布尔isPaused再次变为false。
var isPaused = false;
function sleep() {
if (isPaused == true) {
setTimeout(function(){sleep()},1000);
}
};
console.log("here");
isPaused = true;
sleep();
console.log("here 2");
我该如何解决它,以便它等待而不是继续。
答案 0 :(得分:2)
如果要等待计时器,则需要将var socket = io().connect('http://127.0.0.1:5000');
socket.emit('test_timer')
socket.on('test_timer_reply', function(receiving_data) {
console.log(receiving_data);
});
和Promise
与async
一起使用:
await
这里是JSFiddle。
答案 1 :(得分:1)
您的代码将运行睡眠功能,然后在1000毫秒后再次运行。
您的代码做什么:
答案 2 :(得分:0)
由于睡眠功能已完成设置超时的操作,因此代码可以继续其余操作。
然后,在连续运行1秒(1000毫秒)后,它将执行另一次睡眠,然后可以自由运行任何其他可能的剩余操作。
因此确实发生了无限循环,但这并不禁止其他代码运行。 尝试将console.log('test')放在睡眠功能的第一行。
function sleep() {
console.log("test")
if (isPaused == true) {
setTimeout(function(){
sleep()
},1000);
}
};
进入这里有点太多,其他人可以比我解释得更多,但是看看JS Event Loop,应该可以澄清一些事情!
答案 3 :(得分:0)
那已经是一个无限循环。只需尝试在setTimeout函数内添加一个“ console.log('loop')”,您将看到每秒如何调用它。
另外,请记住javascript不是同步的,因此它将在睡眠前2列在此处打印(请记住,它需要1秒钟),但它会一直处于无限循环中