2016-10-17 1 views
0

私は自分のプロジェクト内で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(); 
+4

は、あなたが完全な例を投稿することができますか?このコードにはループはありません。 –

+0

@GuilhermeSehn問題はありません、やってみてください! – Ucenna

+0

@ルーカスコスタ私は混乱しています。私は答えを知らないので、私はそれ自身で答えることができません。 – Ucenna

答えて

1

あなたが例外をスローしない限り、直接、直接verifyInputからの発信者(myLoop)の実行を停止する方法はありません。

他の人から言われたように、戻り値を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() 

FIDDLE:https://jsfiddle.net/guisehn/r1Lwxkhp/

+0

それは面白いです。私はそれを完全には理解していないので、コールバック関数を見ていることを意味してきました。ありがとうございました! – Ucenna

+1

問題ありません!実際、 'callback'は特別なキーワードでもなく、関数の引数に与えた名前です。ここでの考え方は、 'verifyInput'の第2引数として関数を受け取り、特定の条件が満たされた場合にのみ' verifyInput'の中でそれを呼び出すことです。 –

+0

...私はそれを知っていた...または私はあなたの議論の名前にもっと注意を払っていただろう...私は別のコンテキストで使用される 'コールバック '見たと私は誓ったことができた。ないと思います。ありがとう! – Ucenna

関連する問題