我想知道是否有一种简单的方法来获取“同步” readline或至少在node.js中获得同步I / O的外观
我用这样的东西,但是很尴尬
var readline = require('readline'); var rl = readline.createInterface({ input: process.stdin, output: process.stdout, terminal: false }); var i = 0; var s1 = ''; var s2 = ''; rl.on('line', function(line){ if(i==0) { s1 = line; } else if(i==1) { s2 = line; } i++; }) rl.on('close', function() { //do something with lines })'
取而代之的是,我希望它像这样简单
var s1 = getline(); // or "await getline()?" var s2 = getline(); // or "await getline()?"
有用的条件:
(a)建议不要使用外部模块或/ dev / stdio文件句柄,我正在向代码提交网站提交代码,但这些代码在那儿不起作用
(b)可以使用异步/等待或生成器
(c)应基于行
(d)不需要在处理之前将整个标准输入读入内存
我想这就是你想要的:
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin , output: process.stdout }); const getLine = (function () { const getLineGen = (async function* () { for await (const line of rl) { yield line; } })(); return async () => ((await getLineGen.next()).value); })(); const main = async () => { let a = Number(await getLine()); let b = Number(await getLine()); console.log(a+b); process.exit(0); }; main();
注意:此答案使用实验性功能,并且需要Node v11.7