我想知道是否有一种简单的方法来获取“同步”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) 可以使用 async/await 或生成器
(c) 应基于线路
(d) 在处理之前不应要求将整个 stdin 读入内存
以防将来有人偶然发现这里
节点11.7 added 对此的支持 https://nodejs.org/api/readline.html#readline_rl_symbol_asynciterator using async await
const readline = require('readline');
//const fileStream = fs.createReadStream('input.txt');
const rl = readline.createInterface({
input: process.stdin, //or fileStream
output: process.stdout
});
for await (const line of rl) {
console.log(line)
}
记得把它包起来async function(){}
否则你会得到一个保留关键字错误.
const start = async () =>{
for await (const line of rl) {
console.log(line)
}
}
start()
要读取单独的行,您可以使用async
手动迭代器
const it = rl[Symbol.asyncIterator]();
const line1 = await it.next();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)