如何在Node.js中无限读取

while(1){ rl.question("Command: ",function(answer){ console.log(answer); }) } 

刚刚试过这个代码,而是一个接一个的input,它闪烁“Command:”行。 我知道node.js是非阻塞的,但我不知道如何解决这个问题。

 var readline = require('readline'); var log = console.log; var rl = readline.createInterface({ input: process.stdin, output: process.stdout }); var recursiveAsyncReadLine = function () { rl.question('Command: ', function (answer) { if (answer == 'exit') //we need some base case, for recursion return rl.close(); //closing RL and returning from function. log('Got it! Your answer was: "', answer, '"'); recursiveAsyncReadLine(); //Calling this function again to ask new question }); }; recursiveAsyncReadLine(); //we have to actually start our recursion somehow 

关键是不要使用同步循环。 处理答案后我们应该问下一个rl.question 。 recursion是要走的路。 我们定义提出问题的函数并处理答案,然后在答复处理之后从内部调用它。 这样我们就像常规循环一样从头开始。 但循环不关心ansyc代码,而我们的实施关心。

另一个选项,通过Node.js文档,是使用事件 :

 var readline = require('readline'), rl = readline.createInterface(process.stdin, process.stdout); rl.setPrompt('OHAI> '); rl.prompt(); rl.on('line', function(line) { switch(line.trim()) { case 'hello': console.log('world!'); break; default: console.log('Say what? I might have heard `' + line.trim() + '`'); break; } rl.prompt(); }).on('close', function() { console.log('Have a great day!'); process.exit(0); });