0
予期せぬ動作が発生したときにノードプログラムにコマンドラインインターフェイスを作成していました。Writing CLI:再帰関数の予期しない動作
私はnumInputsLeftをデクリメントすることが期待// Starts command line prompt bot
// @param {Function} callback - callback upon finshing CL inputs
function main(callback) {
this.args = []; // store CL args
this.consoleOutputs = ["Enter input1: ", "Enter input2: ", "enter input3: "];
this.nextInput = function(consoleOutputs, numInputsLeft) {
if (numInputsLeft == 0) { callback.apply(null, args); } // done, stop recursing and run callback
// write output to prompt user
process.stdout.write(consoleOutputs[consoleOutputs.length-numInputsLeft]);
process.stdin.on('readable', function() {
var text = process.stdin.read();
if (text !== null) {
console.log(numInputsLeft);
args.push(text);
// recurse to print next output and wait for next input
nextInput(consoleOutputs, numInputsLeft-1);
}
});
}
nextInput(this.consoleOutputs, consoleOutputs.length);
}
:など14、13、12、 代わりに、numInputs左が14、14、14で貼り付けたが、その他
このエラーが発生する理由とどのように私は解決することができますそれ?
あなたのソリューションは私のために働いた。しかし、私はまだ混乱しています。私は、再帰呼び出しでnumInputsLeft:= numInputsLeft-1を期待していました。たとえば、次のようになります。 function series(n){ \t if(n == 1){return 1; } \t return n * series(n-1); } 各再帰呼び出しでn:= n-1。 series(4)は24を返します。 nextInputは非同期コールバックで "再帰"が発生するため、実際の再帰関数ではないためですか? – George