抱歉,我刚刚踏上JavaScript,目前正试图从控制台收集用户输入。我有一个看起来像这样的代码:
include 'lib/simplehtmldom.php';
因此,如果我尝试运行它,它会显示:
$(function () {
var chart = new Highcharts.Chart({
chart: {
renderTo: 'container',
type: 'line',
marginLeft: 30
},
title: {
text: null
},
legend: {
enabled: false
},
xAxis: {
categories: ['1990', '1991', '1992', '1993', '1994', '1995'],
tickmarkPlacement: 'on',
tickInterval: 1,
tickPosition: 'inside',
tickLength: 2
},
yAxis: {
lineWidth: 1,
tickWidth: 1,
tickPosition: 'inside',
tickLength: 2,
min: 0,
max: 200,
tickInterval: 50,
gridLineWidth: 0
/*,offset:-26*/
},
plotOptions: {
line: {
marker: {
enabled: false
}
}
},
series: [{
data: [100, 125, 150, 125, 90]
},{
data: [100, 80, 90, 80, 70]
},{
data: [100, 90, 80, 60, 180]
}]
});
然后等我输入。显然main = () => {
var num = getInput();
console.log(num);
}
getInput = () => {
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('Lemme test: ', (ans) => {
rl.close();
return ans;
});
}
main();
在Lemme test: undefined
完成之前运行,或者console.log(num);
吐出getInput();
然后请求输入。
BTW切换getInput();
和undefined
不起作用。
为什么会这样?
答案 0 :(得分:0)
这是因为节点不等待readline获取输入 - 就像Node中的几乎所有内容一样,它是异步的。因此它会触发用户输入请求并继续执行该程序。一旦有一些用户输入,如果触发你给它的回调。因此,要处理这个问题,您需要管理回调中的use输入,或者在回调中调用一个函数来异步处理输入。例如:
main = () => {
var num = getInput();
}
dealWithInput = (str) => {
console.log(str)
}
getInput = () => {
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('Lemme test: ', (ans) => {
rl.close();
dealWithInput(ans);
});
}
main();
答案 1 :(得分:0)
这是因为getInput
函数是一个回调,这意味着它在将来的某个时刻被执行,因此console.log
(不是回调)被执行之前。
当您将其分配给另一个函数时,它是一个回调函数或方法:
let example = () => {
// This is a callback
}
doSomething(result => {
// This is a callback too because its the same as doing the following
})
doSomething(function(result){
// This is a callback without arrow functions
})