【问题标题】:Node.js For-Loop and Readline Function Calls?Node.js For-Loop 和 Readline 函数调用?
【发布时间】:2017-08-24 11:16:39
【问题描述】:

我正在尝试输入一系列测试分数并确定它们在 JavaScript 中的平均值,我想我会尝试 Node.js。函数 readTestScores() 利用 readline 的 question() 方法——来自 Node.js 的 Readline 模块,通过内部嵌套的 for 循环获得期末考试成绩,并调用 question() 获得七个测试成绩.见下文(是的,我知道,我的代码看起来很乱):

function readTestScores() {
    var score = 0;

    rl.question('Enter exam score:', (examScore) => {
        console.log("Enter test scores: ");
        for (var i=0; i < 7; i++) {
            rl.question('', (score) => {
            test_avg += score;
            });
        }
        rl.close();
    });
    test_avg /= 7;
}

当我运行我的代码时,当执行到 for 循环时,它会跳过所有 question() 调用直到最后,我只能在程序终止之前输入一个值。有没有办法纠正这个问题?

编辑:这是我用来创建 readline 接口的代码:

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

【问题讨论】:

  • 看起来是循环的时间问题以及回调函数实际执行的时间。
  • i 没有在循环内使用,所以我不明白为什么它会是一个关闭问题。 @Charybdis 你能展示问题的方法吗?可能有一种更简单的方法可以做到这一点,但是我们必须知道 rl 对象及其方法的作用。
  • 啊,它是 Node.js 的 Readline 模块的一部分。 question() 方法显示一个查询参数,等待用户输入,然后以输入作为其第一个参数执行一个回调函数。
  • @Shilly(抱歉,不确定您是否在 cmets 上收到通知)

标签: javascript node.js asynchronous ecmascript-6


【解决方案1】:

下面是一些使用 Readline 计算平均值的代码,基于小 cli 教程:

'use strict';

var aiScores = [];
var iAverage;

function add(a, b) {
    return a + b;
}

const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.setPrompt('Enter exam score > ');
rl.prompt();

rl.on('line', (line) => {
  console.log(line);
  if (Number.isInteger(parseFloat(line))) {
      aiScores.push(parseFloat(line));
      console.log(aiScores);
      console.log(parseFloat(line));
      iAverage = (aiScores.reduce(add, 0)/aiScores.length);
      console.log('Current average = ' + iAverage);
  } else {
      switch(line.trim()) {
        case 'hello':
          console.log('world!');
        case 'close':
          rl.close();
          break;
        default:
          console.log(`Say what? I might have heard '${line.trim()}'`);
          break;
      }
  }
  rl.prompt();
}).on('close', () => {
  console.log('Have a great day!');
  process.exit(0);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2020-11-05
    相关资源
    最近更新 更多