我经常在项目中使用verifyInput函数,以确保我从用户那里获得了有效的输入。我一次又一次地希望自己可以从我的verifyInput退出父函数。通常给verifyInput一个prompt()
函数。提示,有取消键。如果单击取消,我想退出嵌套表达式。我该怎么做?
function verifyInput(foo, value){
const input = foo();
if (!isNaN(input) && !input || input === null || input === undefined){
if(input === null){
/*The input is null, because they hit the cancel button. I should exit myLoop here.*/
} else {
alert("Not valid.");
}
return verifyInput(foo,value);
} else {
if(value && input.search(value) < 0){
alert("'"+[input]+"' is not a valid input.");
return verifyInput(foo,value);
}else{
return input;
}
}
}
function myFunc(){
var myInput = verifyInput( () => prompt("What is your input?"));
alert(myInput);
return myFunc();
}
myFunc();
最佳答案
除非引发异常,否则无法直接从myLoop
直接停止执行调用方(verifyInput
)的方法。
正如其他人所说,您可以检查myLoop
的返回值以有条件地停止它。
但是也许更干净的解决方案是为此使用回调,只有在输入不是"exit"
的情况下才会调用该回调。如果有效,此回调将负责获取输入,并再次调用myFunc
以继续循环。例:
function verifyInput(prompter, callback) {
var value = prompter()
if (value === "exit") {
return // don't proceed with the callback if `value` is "exit"
}
if (invalid(value)) { // function to be implemented
alert("invalid")
return verifyInput(prompter, callback)
}
callback(value)
}
function myFunc() {
var prompter = () => prompt("What is your input?")
verifyInput(prompter, (value) => {
console.log(value) // logs the input
myFunc()
})
}
myFunc()
字段:https://jsfiddle.net/guisehn/r1Lwxkhp/