我有以下Node.js代码行为奇怪:
#!/usr/bin/env node
"use strict";
var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
function input(prompt) {
rl.question(prompt, function (x) {
rl.close();
console.log("debug: " + x);
return x;
});
}
function main() {
var n = input("Number: ");
// console.log("value: " + n); // problematic line
}
main();
我想模仿Python的raw_input
,即从用户那里读取一行。显示提示后,应阻止程序,直到用户按Enter键。
如果"有问题的行"在评论,它的工作,程序正在等待输入。但是,如果此行不在评论中,则程序不会等待输入,n
变为undefined
。为什么?如何编写一个返回用户输入的函数?
答案 0 :(得分:3)
那是因为你期望执行输入等待直到调用return,这不是它的工作方式。有问题的一行确实是前一行。首先,输入不返回任何内容,return语句是问题回调函数的返回,但是,你似乎误解了执行流程,因为我们在某些时候都有这种情况(你会在一些事情之后很快得到它)像这样的死胡同)
你可能想这样做:
#!/usr/bin/env node
"use strict";
var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
function input(prompt, callback) {
rl.question(prompt, function (x) {
rl.close();
callback(x);
});
}
function main() {
var n = input("Number: ", console.log);
}
main();
如果您是javascript和节点的新手,您可能会发现使用learnyounode和node code school path非常有用,甚至,如果您有时间,金钱和机会,请阅读Node.js, MongoDB, and AngularJS Web Development,布拉德戴利。