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);
}