在浏览器中,我们有 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 回调之前出现了两个提示。
我该如何解决这个问题?
对于这种情况,我一直在使用 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);