Я понимаю обоснование в Node.js для асинхронных событий, и я изучаю, как писать код таким образом. Однако я придерживаюсь следующей ситуации:
Я хочу написать код, который иногда приостанавливается для ввода пользователем.
Программа не предназначена как сервер (хотя в настоящее время она предназначена для командной строки). Я понимаю, что это нетипичное использование Node. Моя цель - в конечном итоге перенести программу на клиентское 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);
}