Node.js で標準入力を簡単に扱うには、ジェネレータを使ってこんな風に書けばいいみたい。
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
var gen = main()
gen.next()
rl.on('line', (line) => {
gen.next(line)
});
function *main() {
while (true) {
var line = yield
console.log('gen Received:', line)
}
}
ジェネレータで yield
を経由して外から値が渡せるの知らなかった。yield は普通の関数からは使えない、つまり、ジェネレータから呼び出される関数内から yield することは出来ないので不便だと思ってたけど、関数の呼び出しの関係をひっくり返せばいいので、そこまで不自由ではなかった。
リファレンス:[function* - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/function*) |