非ブロッキングコールバック関数で親関数を再帰的に呼び出すことは可能ですか?
例えば:
function checkValidZip(zipInput) {
if (!zipInput.trim().match(/^(\d{5})$/g)) {
userInput("Please enter a valid 5 digit shipping zip code", function(zip){
//recursively call the parent function to check for valid zip
//(and continue to prompt the user until they enter proper zip)
return checkValidZip(zip);
});
}
//and return (only) the valid zip
return output(zipInput);
}
function userInput(param1, callback){
input = prompt(param1);
callback(input);
}
function output(param){
alert(param);
}
checkValidZip(prompt("hello"));
http://jsbin.com/omubab/1/edit
明らかに問題は、コードがコールバック関数の呼び出しを待たずに実行を継続し (したがって、この例では zip をチェックしない)、再帰関数の追加の反復が親が戻るまで呼び出されないことです (この例では例return output(zipInput);
)。
繰り返しますが、コールバックとして「自己呼び出し」再帰関数を持つことは可能ですか?