如何在nodejs中获取同步readline,或者使用异步“模拟”它?

2024-04-28

我想知道是否有一种简单的方法来获取“同步”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(使用前将#替换为@)

如何在nodejs中获取同步readline,或者使用异步“模拟”它? 的相关文章

随机推荐

  • android 将自定义字体设置为油漆

    我想在油漆上绘制文字 如何用自定义字体绘制它 前 Helvetica 并且还粗体 我更愿意使用系统字体而不是从资源创建它 谢谢 如果 自定义字体 是指作为资源提供的字体 则以下代码应该有效 Typeface plain Typeface c
  • Java 压缩字符串

    我需要创建一个接收字符串并返回字符串的方法 防爆输入 AAABBBCCC 防爆输出 3A4B2C 好吧 这很尴尬 我在今天的面试中无法做到这一点 我正在申请初级职位 现在 我在家尝试制作一些静态工作的东西 我的意思是 不使用循环有点无用 但
  • 人们应该选择 ImmutableDictionary 还是 ImmutableSortedDictionary?

    我听说 NETSystem Collections Immutable集合被实现为平衡二叉树 以满足其不变性约束 甚至是传统上对哈希表进行建模的集合 例如Dictionary 通过使用积分值GetHashCode作为排序键 如果我有一种类型
  • 如何从 Jenkins 文件调用 groovy 脚本?

    我正在尝试将 Jenkinsfile 中的内容分离成一个常规脚本来制作 但它无法调用这些脚本 这是代码 usr bin env groovy node test node stage Checkout echo BRANCH NAME en
  • Python ctypes:SetWindowsHookEx 回调函数从未被调用

    我正在尝试用 Python 编写一个程序 该程序可以识别何时显示警报框 对话框 它正在处理多个监视器 我希望它在任务栏图标闪烁 弹出错误 通知等时在辅助监视器上显示可视化效果 据我所知 检测这些事件的方法是使用消息挂钩 如下所述 http
  • 使用本地 SQlite 数据库填充可扩展列表视图的方法

    我的应用程序中有一个 sqlite 数据库 我想用它制作一个可扩展的列表视图 我已经确定了我应该采取的方法 尝试了很多方法来找到相同的教程 但找不到一个使用本地数据库填充可扩展列表的教程 Android 网站上有一个教程 他们使用手机中的联
  • 可选地支持模板的initializer_list构造可能包装容器

    如果我有一个包装标准容器的模板 似乎我可以相当轻松地委托初始化器列表构造函数 template
  • 反应光滑的幻灯片高度问题

    我无法让这些 React Slick 滑块组件达到相同的高度 它们都是响应式 div 并随着页面大小的变化相应地调整大小 但理想情况下 我希望左侧的 div 与右侧的 div 具有相同的高度 我使用下面的代码片段定义了 SimpleSlid
  • 插入到表中并在 SQL 中拆分字符串

    我想将分割字符串插入到我的表中 如您所见 create table Organization organizationId bigint provienceId bigint CityId bigint TownId bigint Inse
  • Objective-C 有没有办法捕获发送到 nil 的消息?

    我刚刚被一种烦人的东西咬了bug https stackoverflow com questions 913627 uiviewcontroller viewdidload not being calledObjective C 中的 向
  • 你在实际项目中使用过Quickcheck吗[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 快速检查 http www cs chalmers se rjmh QuickCheck 及其变体 即使有一个Java https bitbuc
  • 每次升级 Xcode 时,我都会遇到安装了 Brew 的 GCC 的链接器错误

    因此 我升级到 Mavericks 以及最新版本的 Xcode 5 02 并且正如预期的那样 无法编译任何包含 C 扩展的新 Ruby gem 这种情况尤其发生在我自己的项目 NMatrix 中 其中包含 C 和 C 代码 我重新安装了 X
  • 如何从 shell 使用 fnmatch?

    在通用 shell 脚本中 我想使用 shell 模式匹配来过滤文本文件的行 我在 files txt 中有一个文件名列表 file1 txt file2 sh file3 png 我在patterns txt 中有一个模式列表 other
  • 如何将新设备添加到配置文件

    我想编辑分发配置文件 以便我可以添加 删除设备 基本上 Apple 的以下文档页面向我们展示了如何轻松完成此操作 但是自从他们更新了门户后 我不再知道如何做 http developer apple com library ios reci
  • 如何在 Ubuntu 14.04 LTS 中安装 ia32-libs (Trusty Tahr)

    我昨天安装了 Ubuntu 14 04 Trusty Tahr 一切看起来都还好 但是当我尝试编译一些C代码时 我遇到了以下错误 该错误似乎是由于操作系统缺乏 32 位架构支持造成的 错误输出如下 usr bin ld i386 archi
  • 如何使用 JIRA REST API 获取项目中的所有冲刺

    是否有类似 https www example com jira rest agile 1 0 sprint project XYZ 之类的内容来检索 JIRA Software 项目中的所有冲刺 JIRA 平台 API 可以检索项目信息
  • Oracle:SQL查询查找属于表的所有触发器?

    我怎样才能找到属于一个表的所有触发器 以下内容将独立于您的数据库权限而工作 select from all triggers where table name YOUR TABLE 以下备用选项可能有效也可能无效 具体取决于您分配的数据库权
  • Android Map API V2 设置自定义 InfoWindow 位置

    我对地图上的所有标记使用 InfoWindowAdapter Api v2 所有标记都清晰可见 问题是我的自定义信息窗口的大小约为 500px 300px 当我触摸地图上的任何点时 它被设置为屏幕中心 因此信息窗口将从顶部裁剪 我的要求是根
  • Ruby RVM apt-get 更新错误

    尝试使用 RVM 安装任何内容时出现以下错误 Searching for binary rubies this might take some time Found remote file https rvm io binaries ubu
  • 如何在nodejs中获取同步readline,或者使用异步“模拟”它?

    我想知道是否有一种简单的方法来获取 同步 readline 或至少在 node js 中获取同步 I O 的外观 我用这样的东西 但它很尴尬 var readline require readline var rl readline cre