用户输入 node.js
user input with node.js
我有以下 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。
如果 "problematic line" 在注释中,它可以工作,程序正在等待输入。但是,如果此行不在注释中,则程序不会等待输入并且 n
变为 undefined
。为什么?如何编写 returns 用户输入的函数?
那是因为您希望在 return 被调用之前执行输入,这不是它的工作方式。有问题的行确实是前一行。首先,input 没有 return 任何东西, return 语句是问题回调函数的 return,但是,你似乎误解了执行流程,就像我们在某些时候一样(在像这样的死胡同之后你会很快得到它)
- 您的脚本已加载
- 您声明并定义 rl、input 和 main
- 主要执行
- 你将n定义为输入的结果
这就是事情开始变得异步有趣的地方
- 由于问题是异步的,它的执行开始但不会阻塞进程
- 输入return未定义(您仍在等待输入)
- 你打印那个 undefined
- 你在输入上写点东西
- question() 完成执行并调用回调(您作为第二个参数提供的函数)
- rl 已关闭
- 回调函数return是行,被void吞没了(这不是专业术语,只是个比喻)
您可能想这样做:
#!/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 and the node code school path or even, if you have the time, the money and the opportunity, read Node.js, MongoDB, and AngularJS Web Development 非常有用,作者 Brad Dayley。
我有以下 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。
如果 "problematic line" 在注释中,它可以工作,程序正在等待输入。但是,如果此行不在注释中,则程序不会等待输入并且 n
变为 undefined
。为什么?如何编写 returns 用户输入的函数?
那是因为您希望在 return 被调用之前执行输入,这不是它的工作方式。有问题的行确实是前一行。首先,input 没有 return 任何东西, return 语句是问题回调函数的 return,但是,你似乎误解了执行流程,就像我们在某些时候一样(在像这样的死胡同之后你会很快得到它)
- 您的脚本已加载
- 您声明并定义 rl、input 和 main
- 主要执行
- 你将n定义为输入的结果 这就是事情开始变得异步有趣的地方
- 由于问题是异步的,它的执行开始但不会阻塞进程
- 输入return未定义(您仍在等待输入)
- 你打印那个 undefined
- 你在输入上写点东西
- question() 完成执行并调用回调(您作为第二个参数提供的函数)
- rl 已关闭
- 回调函数return是行,被void吞没了(这不是专业术语,只是个比喻)
您可能想这样做:
#!/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 and the node code school path or even, if you have the time, the money and the opportunity, read Node.js, MongoDB, and AngularJS Web Development 非常有用,作者 Brad Dayley。