Javascript睡眠直到按下键

Javascript睡眠直到按下键,javascript,jquery,Javascript,Jquery,我做了一些研究,找到了繁忙等待的解决方案。我不想让处理器在脚本中执行循环,直到我通过JQuery获得一个按键事件 我怎样才能提取像sleepUntilKeyPress()这样的函数,这是一个类似C中的sleep()的函数,但它不是等待某个特定的时间来等待按键?你在向后思考。您的函数不应该等待按键来执行某些操作,只要按下一个键,该函数就应该执行某些操作。在键回调可以到达的范围内维护数据状态,并在按键时更新状态 var interval = window.setInterval(function (

我做了一些研究,找到了繁忙等待的解决方案。我不想让处理器在脚本中执行循环,直到我通过JQuery获得一个按键事件


我怎样才能提取像sleepUntilKeyPress()这样的函数,这是一个类似C中的sleep()的函数,但它不是等待某个特定的时间来等待按键?

你在向后思考。您的函数不应该等待按键来执行某些操作,只要按下一个键,该函数就应该执行某些操作。在键回调可以到达的范围内维护数据状态,并在按键时更新状态

var interval = window.setInterval(function () {
    // hang around and do nothing
}, 1000);

document.onkeypress = function () {
    if (/* some specific character was pressed */) {
        window.clearInterval(interval);

        // do some other thing, other thing
    }
};
你想说:

while(!keypress){
    dontDoSomething();
}
你应该做一些更像:

on(keypress, doSomething);
考虑一下这个想法:

var counter, ispressed, el;

// Bad
counter = 0;
ispressed = false;
el = document.getElementById("element");

el.addEventListener("mousedown", function () {
    ispressed = true;
});

el.addEventListener("mouseup", function () {
    ispressed = false;
});

while (1) {
    if (ispressed) {
        counter += 1;
    }
}

// Better
el.addEventListener("click", function () {
    counter += 1;
});

让我们忘记这样一个事实,
虽然
会锁定程序,(我甚至不认为事件侦听器会触发,而且我很确定DOM会锁定),但您要求您的程序不断浪费时间检查是否按下了按钮。与其这样做,不如让浏览器使用内置的进行检查,并在发现按钮已按下时执行通常的操作。

为什么要睡觉?为什么不等待按键事件被激活,然后再从那里开始呢?你在向后思考。不要在按键前不执行,而是在按键时执行。所以你想让处理器继续做它的工作,然后在按键时做些什么?酷,然后只需执行
$(元素)。按键(函数(e){doThingWithKey(e);})
就完成了。@JudismarJunior无论您在循环中执行了什么。@JudismarJunior,您都在反向思考它。如果你到达了一个应该“等待”的点,那么就不要让用户前进。不要运行任何使其向前移动的函数。在Javascript中,您必须从事件处理程序的角度来考虑,而不是像使用标准控制台应用程序那样在IO暂停中思考。如果您描述您的实际问题可能会更好,因为Javascript没有您想要的东西。没有冻结浏览器就不行。迈克C的评论更相关
setInterval
不会像
sleep
那样阻止执行。它只是在运行一组代码之前等待一段时间。在此等待期间可以运行其他代码。这回答了我的问题。谢谢我想我首先在javascript算法上下了很大的功夫,忘记了异步事件。我只需要重写一个算法。