如何在JavaScript
阻塞输入从概念上讲什么,我需要在JavaScript做的是以下几点:如何在JavaScript
// A) set up stuff
// B) collect values from input
do {
var key = readKey();
// do stuff like loading arrays, objects, etc based on this sequential input
} while (key != '.') // period signifies completion
// C) continue to do other stuff that can only be done once the arrays and objects from before are completely loaded.
我知道IO是在JavaScript无阻塞。所以我尝试过设置键盘监听器并在setTimeout结构中循环,但是我无法避免程序执行飞到C),并且由于所有作为B)一部分的先决条件处理未完成而出错。
这里是我的尝试:
// A) prepare stuff
var digrams = type() // B
// C) deal with digrams (errors out if digrams not complete)
function type() {
var loopid;
var loop = function() {
// NOP
};
document.onkeypress = function (e) {
e = e || window.event;
var char = String.fromCharCode(e.keyCode);
...
if (char=='.') {
document.onkeypress = null;
clearInterval(loopid);
return digrams; // arr of obj composed thru key input
}
} // keylistener
// Start the type loop
loopid = setInterval(loop, 10);
}
我真的需要一个方法来“反对”的JavaScript在这里。任何示例代码将不胜感激。
您可以使用Promise
,异步返回一个值.then()
// A) prepare stuff
var digrams = type();
digrams
.then(funcion handleSuccess(value) {
// do stuff with `value` : `arr` passed to `resolve()`
}
, function handleError(err) {
// handle error
}); // B
// C) deal with digrams (errors out if digrams not complete)
function type() {
return new Promise(function(resolve, reject) {
var loopid;
var loop = function() {
// NOP
};
document.onkeypress = function (e) {
e = e || window.event;
var char = String.fromCharCode(e.keyCode);
...
if (char=='.') {
document.onkeypress = null;
clearInterval(loopid);
resolve(arr);
// return digrams; // arr of obj composed thru key input
}
// reject(new Error("error message"));
} // keylistener
// Start the type loop
loopid = setInterval(loop, 10);
});
}
好吧,即使我需要从类型同步回(),承诺的想法听起来很有希望。 –
你可以把“阻塞”的代码放到一个函数,然后一旦KEYUP匹配.
喜欢的东西运行功能:
function myContinue(){
...your blocked code
}
document.onkeypress = function (e) {
... assuming your keypress code is working
if (char=='.') {
myContinue();
}
}
如果你想在continue
函数外部访问的变量,在功能之外声明它们:
var arrayToLoad;
function myContinue(){
console.log(arrayToLoad);
}
document.onkeypress = function(e) {
...
arrayToLoad.push(char);
...
myContinue();
...
}
或者,您可以将vars
传递给函数ñ
function myContinue(diagrams){
...
}
document.onkeypress = function(e) {
...
myContinue(diagrams);
肖恩:这看起来挺有意思的,但具有类型()函数的想法是打开keylisteners,工艺双字母组合,关闭keylisteners,并返回双字母组合。所有这些都被封装到type()函数的行为中。并且只有在该功能下,密钥记录者才能激活。 –
明白...让我重新思考这个问题 –
我正要但是提'Promises' @ guest271314打我吧:)...我会检查答出 –
或者,你可以与DOM的事件驱动架构工作。有一个'keyUp'监听器来监听''。''。发生这种情况时,请在“C”中运行代码。 –
你可能只是在想这个错误。不要阻塞输入,处理输入事件。你说你试过听众,但没有显示你试过的东西。 – Carcigenicate
你的问题非常含糊......你提到了一些键盘监听器,并忘记了用户有其他方法将值输入到字段中(如:复制粘贴)。你问如何阻止输入元素...阻止它到底是什么?加载阵列? Loaded Objects?...请澄清。 –