首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何基于某种计数同步接受多个输入?

如何基于某种计数同步接受多个输入?
EN

Stack Overflow用户
提问于 2020-08-11 04:54:22
回答 1查看 40关注 0票数 0

我正在使用NodeJS。

我的任务如下:

  1. 接受用户输入多少次的“计数”。
  2. 接受基于计数的多个输入,例如如果计数为5,则允许用户输入5次

我面临的问题是如何根据用户第一次输入的“计数”来同步获取用户输入。

例如,如果有C++代码,我可以简单地循环“计数”并同步接受输入。

如何在NodeJS中实现相同的功能?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-11 08:29:28

由于Javascript异步-io事件循环体系结构,实现解决方案要复杂一些。在Javascript中有多种解决这个问题的方法,我已经为您提供了2种方法。

解决方案1

这是“旧”的做事方式。该解决方案使用callbacksrecursion。我不会用这个人,但这是操作JS事件循环的一个很好的例子。

代码语言:javascript
复制
const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.question("Enter inputs count: ", function (countRaw) {
    // validate count
    const count = parseInt(countRaw);
    readMultipuleInputs(count, count, (res) => {
        console.log(res)
        rl.close();
    })
});

function readMultipuleInputs(count, maxCount, cb) {

    if (count == 0) {
        cb([]);
    }

    const currentCount = maxCount-count+1;

    rl.question(`Enter input (${currentCount}/${maxCount}): `, function (res) {
        readMultipuleInputs((count - 1), maxCount, (accumulator) => {
            accumulator.unshift(res);
            cb(accumulator);
        });
    });
}

rl.on("close", function () {
    console.log("\nBYE BYE !!!");
    process.exit(0);
});

解决方案2

这个解决方案是写JS的“现代”方式。它使用asyncawait来允许您将代码视为同步代码。

代码语言:javascript
复制
const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.on("close", function () {
    console.log("\nBYE BYE !!!");
    process.exit(0);
});

function rlQuestionPromise(message) {
    return new Promise((resolve) => {
        rl.question(message, resolve);
    });
}

(async function run() {
    const count = await rlQuestionPromise("Enter inputs count: ");

    const accumulator = [];
    for(let i = 0; i<count; i++ ){
        const res = await rlQuestionPromise(`Enter input (${i+1}/${count}): `);
        accumulator.push(res);
    }
    console.log(accumulator);

    rl.close();
})()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63351720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档