我想知道是否有一种简单的方法来获得“同步”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或generator
(c)应以行为基础
(d)在处理之前不应要求将整个stdin读入内存
解决方法
我想这就是你想要的:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。