gpt4 book ai didi

node.js - 等待用户在 Node.js 中输入输入

转载 作者:IT老高 更新时间:2023-10-28 21:57:36 37 4
gpt4 key购买 nike

我了解 Node.js 中异步事件的基本原理,并且我正在学习如何以这种方式编写代码。但是,我遇到了以下情况:

我想编写偶尔暂停用户输入的代码。

该程序不打算用作服务器(尽管目前它打算用于命令行)。我意识到这是 Node.js 的一种非典型用法。我的目标是最终将程序迁移回客户端 Javascript 应用程序,但我发现在 Node.js 中工作既令人着迷,又对调试非常有用。这让我回到了说明问题的示例:

它读入一个文本文件并输出每一行,除非该行以“?”结尾。在这种情况下,它应该暂停让用户澄清该行的含义。目前我的程序首先输出所有行并等待最后的澄清。

有什么方法可以强制 node.js 在条件触发的情况下准确地暂停命令行输入(即,行以“​​?”结尾)?

var fs = require("fs");
var filename = "";
var i = 0;
var lines = [];

// modeled on http://st-on-it.blogspot.com/2011/05/how-to-read-user-input-with-nodejs.html
var query = function(text, callback) {
process.stdin.resume();
process.stdout.write("Please clarify what was meant by: " + text);
process.stdin.once("data", function(data) {
callback(data.toString().trim());
});
};

if (process.argv.length > 2) {
filename = process.argv[2];
fs.readFile(filename, "ascii", function(err, data) {
if (err) {
console.error("" + err);
process.exit(1);
}
lines = data.split("\n");
for (i = 0; i < lines.length; i++) {
if (/\?$/.test(lines[i])) { // ask user for clarification
query(lines[i], function(response) {
console.log(response);
process.stdin.pause();
});
}
else {
console.log(lines[i]);
}
}
});
}
else {
console.error("File name must be supplied on command line.");
process.exit(1);
}

最佳答案

这是另一种没有依赖关系的方式(readline 是内置的)

const readline = require('readline');

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

return new Promise(resolve => rl.question(query, ans => {
rl.close();
resolve(ans);
}))
}


const ans = await askQuestion("Are you sure you want to deploy to PRODUCTION? ");

关于node.js - 等待用户在 Node.js 中输入输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18193953/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com