如何为NodeJS构建类似confirm()的函数?

问题描述 投票:0回答:1

在浏览器中,我们有 confirm() 函数,它允许提供提示字符串,它返回 true/false。

我正在尝试为 NodeJS cli 应用程序创建类似的功能。下面我使用 readline 模块。这是我的代码:

const readline = require('node:readline');

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

let q = "Do you agree?";

function confirm(question) {
    let options = ["yes", "y", "YES", "Y"];
    let response;

    rl.question(question, ans => {
    response = ans;
    console.log(`You responded with: ${ans}!`);
    rl.close();
    });

    return options.includes(response);
    
}

let ans1 = confirm(q);
console.log(`ans1=${ans1}`);

let ans2 = confirm(q);
console.log(`ans2=${ans2}`);

由于某种原因它不起作用,并且生成的输出也乱序。

Do you agree?ans1=false
Do you agree?ans2=false
yes
You responded with: yes!

我怀疑发生了一些异步行为,因为我们可以看到在实际调用 readline 回调之前出现了两个提示。

我该如何解决这个问题?

javascript node.js
1个回答
0
投票

对于这种情况,我一直在使用 prompt-sync

const prompt = require('prompt-sync')({ sigint: true });

const p1 = prompt("Are you okay 1?");
console.log(p1);

const p2 = prompt("Are you okay 2?");
console.log(p2);
© www.soinside.com 2019 - 2024. All rights reserved.