JS在线运行

版本:
运行结果
教程手册
代码仓库
极速运行
交互输入
极速运行模式,更高效的运行,点击编辑器上方的运行按钮即刻体验吧。
以下是用户最新保存的代码
nodejs function 发布于:2022-09-28 10:52 Promise 高级考核;不计原理,计原理产生的效果;原理太懵逼; 发布于:2022-09-24 20:23 测试 grok-js 发布于:2022-09-23 15:14 获取案件服务人员分支机构、部门信息 发布于:2022-09-22 14:06 将平行结构数据转为树形结构 发布于:2022-09-22 09:19 js 获取 url 的某个参数 发布于:2022-09-21 16:26 股票报价js 发布于:2022-09-20 18:05 JS call()方法 发布于:2022-09-20 14:46 JS 深拷贝 发布于:2022-09-20 14:26 测试Vue-Quill-Editor 发布于:2022-09-20 14:11 员工排序js版 发布于:2022-09-19 16:09 给你一个字符串 s,请你返回 两个相同字符之间的最长子字符串的长度 ,计算长度时不含这两个字符。如果不存在这样的子字符串,返回 -1 。 子字符串 是字符串中的一个连续字符序列。 发布于:2022-09-28 11:16 看代码说出运行结果 发布于:2022-09-17 09:48 哔哩哔哩密码逆向 发布于:2022-09-16 21:16 临时数据处理 发布于:2022-09-16 16:18 实现一个插入排序 发布于:2022-09-16 00:16 手动实现一个Array的sort 发布于:2022-09-16 00:01 给你一个整数数组 arr ,请你删除最小 5% 的数字和最大 5% 的数字后,剩余数字的平均值。 与 标准答案 误差在 10-5 的结果都被视为正确结果。 发布于:2022-09-15 17:14 // 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数, // 并返回它们的数组下标。 发布于:2022-09-15 17:01 实现一个控制并发的Scheduler调度器 addTask(1000,"1"); addTask(500,"2"); addTask(300,"3"); addTask(400,"4"); 的输出顺序是:2 3 1 4 整个的完整执行流程: 一开始1、2两个任务开始执行 500ms时,2任务执行完毕,输出2,任务3开始执行 800ms时,3任务执行完毕,输出3,任务4开始执行 1000ms时,1任务执行完毕,输出1,此时只剩下4任务在执行 1200ms时,4任务执行完毕,输出4 发布于:2022-09-15 16:50 测试一些JS知识点 发布于:2022-09-15 13:36 trans(123456) —— 十二万三千四百五十六 trans(100010001)—— 一亿零一万零一 发布于:2022-09-15 16:15 根据项目业务需求,进行以下两种格式的互相转换 例如 let arr=[1,2,3,4,5] let arr2=null let arr3 = ['a','b'] format_data({q:arr,w:arr2,e:arr3}) [ { q: 1, w: null, e: 'a' }, { q: 2, w: null, e: 'b' }, { q: 3, w: null, e: null }, { q: 4, w: null, e: null }, { q: 5, w: null, e: null } ] 发布于:2022-09-14 14:36 防抖和节流 发布于:2022-09-13 11:06 递归实现斐波那契数列 发布于:2022-09-12 17:41 反直觉 数组操作 发布于:2022-09-11 11:21 数组所有组合的算法 发布于:2022-09-11 10:01 复选框全选与取消 发布于:2022-09-09 23:43 让对象按数组迭代 发布于:2022-09-09 16:54 使用JS实现一个单链表的类 发布于:2022-09-09 15:44 找出字符串中出现次数最多的字符及次数 发布于:2022-09-09 12:03 字符串中a出现的位置及次数 发布于:2022-09-09 11:46 js数组去重 发布于:2022-09-09 11:29 斐波那契数列 // F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2) 斐波那契数列的memoization优化 发布于:2022-09-14 17:23 扁平数组转tree 发布于:2022-09-08 15:29 扁平数据转为tree(只能处理一层) 发布于:2022-09-08 14:56 封装localStorage 发布于:2022-09-08 14:46 jq.on原理实现 发布于:2022-09-07 00:42 实现一个对象拍平 发布于:2022-09-06 00:27 使用proxy实现一个对象属性的双向绑定 发布于:2022-09-05 17:17 遍历一次将扁平数据转为tree 发布于:2022-09-05 19:02 this指向,手写bind、call、apply、new 发布于:2022-09-04 21:07 字符串是有括号组成,判断内容是否为有效内容 发布于:2022-09-04 00:29 自己实现一个new 发布于:2022-09-03 17:09 使用renduce实现一个map、filter 发布于:2022-09-03 12:06 Js 使用reduce实现一个map 发布于:2022-09-02 00:12 JS实现一个观察者模式 发布于:2022-09-02 00:07 学习倾国每日答题多选题 发布于:2022-09-01 18:29 加密工具箱 发布于:2022-09-01 17:00 一大堆数里面找到一个和数值A最接近的数 发布于:2022-09-01 15:14 [更多]
显示目录

逐行读取



逐行读取

本节介绍Node.js readline(逐行读取)模块,它用于提供一个接口。

稳定性: 2 - 不稳定

通过 require('readline'),你可以使用这个模块。逐行读取(Readline)可以逐行读取流

访问该模块的方法如下:

const readline = require('readline');

一旦你开启了这个模块,node程序将不会终止,直到你关闭接口。以下的代码展示了如何优雅的退出程序:

var readline = require('readline');

var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.question("What do you think of node.js? ", function(answer) {
  // TODO: Log the answer in a database
  console.log("Thank you for your valuable feedback:", answer);

  rl.close();
});

readline.createInterface(options)

创建一个逐行读取(Readline) Interface 实例。参数"options"对象有以下值:

  • input - 监听的可读流 (必填)。

  • output - 逐行读取(Readline)数据要写入的可写流(可选)。

  • completer - 用于Tab自动补全的可选函数。参见下面的例子。

  • terminal - 如果希望和TTY一样,对待 input 和 output 流,设置为true。并且由ANSI/VT100转码。默认情况下,检查 isTTY 是否在 output 流上实例化。

    completer 给出当前行的入口,应该返回包含2条记录的数组。

  • 一个匹配当前输入补全的字符串数组

  • 用来匹配的子字符串

最终像这样:[[substr1, substr2, ...], originalsubstring].

例子:

function  completer(line) {
  var completions = '.help .error .exit .quit .q'.split(' ')
  var hits = completions.filter(function(c) { return c.indexOf(line) == 0 })
  // show all completions if none found
  return [hits.length ? hits : completions, line]
}

同时,completer可以异步运行,此时接收到2个参数:

function  completer(linePartial, callback) {
  callback(null, [['123'], linePartial]);
}

为了接受用户输入, createInterface 通常和 process.stdin , process.stdout 一起使用:

var readline = require('readline');
var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

如果你有逐行读取(Readline)实例, 通常会监听 "line" 事件.

如果这个实例参数 terminal = true ,而且定义了 output.columns 属性,那么 output 流将会最佳兼容性,并且,当columns变化时(当它是TTY时, process.stdout 会自动这么做),会在 output 流上触发 "resize" 事件。

Class: Interface

代表一个包含输入/输出流的逐行读取(Readline)接口的类。

rl.setPrompt(prompt)

设置提示符,比如当你再命令行里运行 node 时,可以看到node的提示符 > 。

rl.prompt([preserveCursor])

为用户输入准备好逐行读取(Readline),将当前 setPrompt 选项方法哦新的行中,让用户有新的地方输入。设置 preserveCursor 为 true ,防止当前的游标重置为 0 。

如果暂停,使用 createInterface 也可以重置 input 输入流。

调用 createInterface 时,如果 output 设置为 null 或 undefined ,不会重新写提示符。

rl.question(query, callback)

预先提示 query ,用户应答后触发 callback 。给用户显示query后,用户应答被输入后,调用 callback 。

如果暂停,使用 createInterface 也可以重置 input 输入流。

调用 createInterface 时,如果 output 设置为 null 或 undefined ,不会重新写提示符。

例子:

interface.question('What is your favorite food?', function(answer) {
  console.log('Oh, so your favorite food is ' + answer);
});

rl.pause()

暂停逐行读取(Readline)的 input 输入流, 如果需要可以重新启动。

注意,这不会立即暂停流。调用 pause 后还会有很多事件触发,包含 line 。

rl.resume()

恢复 逐行读取(Readline) input 输入流.

rl.close()

关闭 Interface 实例, 放弃控制输入输出流。会触发"close"事件。

rl.write(data[, key])

调用 createInterface 后,将数据 data 写到 output 输出流,除非 output 为 null ,或未定义 undefined 。 key 是一个代表键序列的对象;当终端是一个 TTY 时可用。

暂停 input 输入流后,这个方法可以恢复。

例子:

rl.write('Delete me!');
// Simulate ctrl+u to delete the line written previously
rl.write(null, {ctrl: true, name: 'u'});

Events

事件: 'line'

function (line) {}

input输入流收到\n后触发,通常因为用户敲回车或返回键。这是监听用户输入的好办法。

监听line的例子:

rl.on('line', function (cmd) {
  console.log('You just typed: '+cmd);
});

事件: 'pause'

function () {}

暂停input输入流后,会触发这个方法。

当输入流未被暂停,但收到SIGCONT也会触发。

监听pause的例子:

rl.on('pause', function() {
  console.log('Readline paused.');
});

事件: 'resume'

function () {}

恢复input输入流后,会触发这个方法。

监听resume的例子:

rl.on('resume', function() {
  console.log('Readline resumed.');
});

事件: 'close'

function () {}

调用 close() 方法时会触发。

当 input 输入流收到"end"事件时会触发。一旦触发,可以认为 Interface 实例结束。例如当 input 输入流收到 ^D ,被当做 EOT 。

如果没有 SIGINT 事件监听器,当 input 输入流接收到 ^C (被当做 SIGINT ),也会触发这个事件。

事件: 'SIGINT'

function () {}

当 input 输入流收到 ^C 时会触发, 被当做 SIGINT 。如果没有 SIGINT 事件监听器,当 input 输入流接收到 SIGINT (被当做 SIGINT ),会触发 pause 事件。

监听 SIGINT 的例子:

rl.on('SIGINT', function() {
  rl.question('Are you sure you want to exit?', function(answer) {
    if (answer.match(/^y(es)?$/i)) rl.pause();
  });
});

事件: 'SIGTSTP'

function () {}

Windows 里不可用

当 input 输入流收到 ^Z 时会触发,被当做 SIGTSTP 。如果没有 SIGINT 事件监听器,当 input 输入流接收到 SIGTSTP ,程序将会切换到后台。

当程序通过 fg 恢复,将会触发 pause 和 SIGCONT 事件。你可以使用两者中任一事件来恢复流。

程切换到后台前,如果暂停了流, pause 和 SIGCONT 事件不会被触发。

监听SIGTSTP的例子:

rl.on('SIGTSTP', function() {
  // This will override SIGTSTP and prevent the program from going to the
  // background.
  console.log('Caught SIGTSTP.');
});

事件: 'SIGCONT'

function () {}

Windows里不可用

一旦input流中含有^Z并被切换到后台就会触发。被当做SIGTSTP,然后继续执行fg(1)。程切换到后台前,如果流没被暂停,这个事件可以被触发。

监听SIGCONT的例子:

rl.on('SIGCONT', function() {
  // `prompt` will automatically resume the stream
  rl.prompt();
});

例子: Tiny CLI

以下的例子,展示了如何所有这些方法的命令行接口:

var readline = require('readline'),
    rl = readline.createInterface(process.stdin, process.stdout);

rl.setPrompt('OHAI> ');
rl.prompt();

rl.on('line', function(line) {
  switch(line.trim()) {
    case 'hello':
      console.log('world!');
      break;
    default:
      console.log('Say what? I might have heard `' + line.trim() + '`');
      break;
  }
  rl.prompt();
}).on('close', function() {
  console.log('Have a great day!');
  process.exit(0);
});

readline.cursorTo(stream, x, y)

在TTY流里,移动光标到指定位置。

readline.moveCursor(stream, dx, dy)

在TTY流里,移动光标到当前位置的相对位置。

readline.clearLine(stream, dir)

清空TTY流里指定方向的行。dir是以下值:

  • -1- 从光标到左边
  • 1- 从光标到右边
  • 0- 整行

readline.clearScreenDown(stream)

清空屏幕上从当前光标位置起的内容。

由JSRUN为你提供的JS在线运行、在线编译工具
        JSRUN提供的JS在线运行,JS 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。

title

使用此草稿 删除草稿

  • 00:23
注册登录后可减少验证码的弹出,点击前往 注册 | 登录

皮肤:

运行模式:

嵌入代码 iframe嵌入:


服务器已安装大部分常用的第依赖库,但仍可能存在一些未被安装的库, 可以通过本窗口立即安装所需依赖库。


请输入依赖库的名称:

请选择语言: