类 Neovim

Neovim API

层次结构 (查看全部)

构造函数

属性

Buffer: typeof Buffer = Buffer
标签页: typeof Tabpage = Tabpage
窗口: typeof Window = Window
_isReady: Promise<boolean> = ...
client: any
data?: number | Buffer
logger: Logger
prefix: string = 'nvim_'
transport: Transport
captureRejectionSymbol: typeof captureRejectionSymbol
captureRejections: boolean

设置或获取所有发射器的默认 captureRejection 值。

defaultMaxListeners: number
errorMonitor: typeof errorMonitor

此符号用于安装仅用于监视 'error' 事件的侦听器。使用此符号安装的侦听器在调用常规 'error' 侦听器之前被调用。

使用此符号安装侦听器不会在发出 'error' 事件后更改行为,因此如果未安装常规 'error' 侦听器,则进程仍会崩溃。

访问器

  • get buffers(): Promise<Buffer[]>
  • 获取当前缓冲区句柄列表

    包含未列出的(未加载/已删除)缓冲区,例如 ls!。使用 buffer.loaded 检查缓冲区是否已加载

    返回 Promise<Buffer[]>

    缓冲区句柄列表

  • get colorMap(): Promise<{
        [name: string]: number;
    }>
  • 获取定义的颜色映射

    返回 Promise<{
        [name: string]: number;
    }>

    颜色映射

  • 获取 mode(): Promise<{
        blocking: boolean;
        mode: string;
    }>
  • 获取当前模式。|mode()| "blocking" 为 true 表示 Nvim 正在等待输入。

    返回 Promise<{
        blocking: boolean;
        mode: string;
    }>

    模式信息

  • 获取 namespaces(): Promise<{
        [name: string]: number;
    }>
  • getNamespaces() 的别名

    返回 Promise<{
        [name: string]: number;
    }>

  • 获取 uis(): Promise<Ui[]>
  • 获取一个代表已附加 UI 的字典列表。

    返回 Promise<Ui[]>

    UI 字典数组 每个字典都有以下键: "height" UI 的请求高度 "width" UI 的请求宽度 "rgb" UI 是否使用 rgb 颜色(false 表示 cterm 颜色) "ext_..." 请求的 UI 扩展,参见 |ui-options| "chan" 远程 UI 的通道 ID(对于 TUI 不存在)

方法

  • 参数

    • name: string
    • args: any[] = []

    返回 Promise<any>

  • emitter.on(eventName, listener) 的别名。

    参数

    • eventName: string | symbol
    • listener: ((...args: any[]) => void)
        • (...args): void
        • 参数

          • Rest...args: any[]

          返回 void

    返回 this

    v0.1.26

  • 使用给定参数调用 VimL 函数。

    在执行错误时:使用 VimL 错误失败,不更新 v:errmsg。

    参数

    • fname: string
    • args: VimValue | VimValue[] = []

    返回 Promise<any>

  • 以原子方式调用多个 API 方法。

    这主要有两种用途

    • 从异步上下文中以原子方式执行多个请求,即在不交织重绘、其他客户端的 RPC 请求或用户交互的情况下(但是 API 方法可能会触发具有这种副作用的自动命令或事件处理,例如 |:sleep| 可能唤醒计时器)

    • 最小化多个请求序列的 RPC 开销(往返次数)。

    参数

    • calls: VimValue[]

    返回 Promise<[any[], boolean]>

  • 使用给定的参数调用 VimL |Dictionary-function|。

    在执行错误时:使用 VimL 错误失败,不更新 v:errmsg。

    参数

    • dict: object
    • fname: string
    • args: VimValue | VimValue[] = []

    返回 object

  • 执行 ex 命令。

    在执行错误时:使用 VimL 错误失败,不更新 v:errmsg。

    参数

    • arg: string

      Ex 命令字符串

    返回 Promise<any>

  • 执行 ex 命令并返回其(非错误)输出。Shell |:!| 输出不会被捕获。

    在执行错误时:使用 VimL 错误失败,不更新 v:errmsg。

    参数

    • arg: string

    返回 Promise<string>

  • 创建一个新的命名空间,或获取一个已存在的命名空间。

    命名空间用于缓冲区高亮和虚拟文本,请参阅 |nvim_buf_add_highlight()| 和 |nvim_buf_set_virtual_text()|。

    命名空间可以是命名的或匿名的。如果 name 与现有命名空间匹配,则返回关联的 id。如果 name 是空字符串,则创建一个新的匿名命名空间。

    参数

    • name: string = ''

      命名空间名称或空字符串

    返回 Promise<number>

    命名空间 id

  • 同步调用为名为 eventName 的事件注册的每个侦听器,按照它们注册的顺序,并将提供的参数传递给每个侦听器。

    如果事件有侦听器,则返回 true,否则返回 false

    const EventEmitter = require('events');
    const myEmitter = new EventEmitter();

    // First listener
    myEmitter.on('event', function firstListener() {
    console.log('Helloooo! first listener');
    });
    // Second listener
    myEmitter.on('event', function secondListener(arg1, arg2) {
    console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
    });
    // Third listener
    myEmitter.on('event', function thirdListener(...args) {
    const parameters = args.join(', ');
    console.log(`event with parameters ${parameters} in third listener`);
    });

    console.log(myEmitter.listeners('event'));

    myEmitter.emit('event', 1, 2, 3, 4, 5);

    // Prints:
    // [
    // [Function: firstListener],
    // [Function: secondListener],
    // [Function: thirdListener]
    // ]
    // Helloooo! first listener
    // event with parameters 1, 2 in second listener
    // event with parameters 1, 2, 3, 4, 5 in third listener

    参数

    • eventName: string | symbol
    • Rest...args: any[]

    返回 boolean

    v0.1.26

  • 评估 VimL 表达式 (:help expression)。字典和列表将递归扩展。在 VimL 错误时:返回一个通用错误;v:errmsg 不会更新。

    参数

    • expr: string

    返回 Promise<VimValue>

  • 返回一个数组,列出发射器已注册监听器的事件。 数组中的值是字符串或 Symbol

    const EventEmitter = require('events');
    const myEE = new EventEmitter();
    myEE.on('foo', () => {});
    myEE.on('bar', () => {});

    const sym = Symbol('symbol');
    myEE.on(sym, () => {});

    console.log(myEE.eventNames());
    // Prints: [ 'foo', 'bar', Symbol(symbol) ]

    返回值 (string | symbol)[]

    v6.0.0

  • lua() 的别名,与 neovim API 保持一致

    参数

    • code: string
    • args: VimValue[] = []

    返回 Promise<VimValue>

  • 将输入键发送到 Nvim,受 mode 标志控制的各种怪癖的影响。 这是一个阻塞调用,与 |nvim_input()| 不同。

    在执行错误时:不会失败,但会更新 v:errmsg。

    参数

    • keys: string

      要输入的内容

    • mode: string

      行为标志,请参阅 |feedkeys()|

    • escapeCsi: boolean

      如果为 true,则在 keys 中转义 K_SPECIAL/CSI 字节

    返回 Promise<any>

  • 获取缓冲区本地 |user-commands| 的映射。

    参数

    • options: {} = {}

      可选参数(目前未使用)

      返回 Promise<Command>

      描述命令的映射映射

    • 按名称或 ID 获取高亮

      参数

      • nameOrId: string | number

        名称或 ID

      • isRgb: boolean = true

        是否应该导出 RGB 颜色

      返回值 void | Promise<object>

      高亮定义映射

    • 按 ID 获取高亮定义 |hlID()|

      参数

      • id: number

        由 |hlID()| 返回的高亮 ID

      • isRgb: boolean = true

        是否应该导出 RGB 颜色

      返回值 Promise<object>

      高亮定义映射

    • 按名称获取高亮定义

      参数

      • name: string

        高亮组名称

      • isRgb: boolean = true

        是否应该导出 RGB 颜色

      返回值 Promise<object>

      高亮定义映射

    • 获取全局(非缓冲区本地)|mapping| 定义列表。

      参数

      • mode: string

        模式简称("n","i","v",...)

      返回值 Promise<object[]>

      描述映射的 maparg()-like 字典数组。 "buffer" 键始终为零。

    • 返回 EventEmitter 的当前最大监听器值,该值由 emitter.setMaxListeners(n) 设置或默认为 defaultMaxListeners

      返回值 number

      v1.0.0

    • 获取现有的非匿名命名空间。

      返回 Promise<{
          [name: string]: number;
      }>

      将名称映射到命名空间 ID 的字典。

    • 根据 this 的类型检索作用域选项

      参数

      • name: string

      返回 void | Promise<VimValue>

    • 获取描述进程 pid 的信息。

      参数

      • pid: number

        进程 ID

      返回 Promise<Proc>

      进程属性映射,如果进程未找到则为 null

    • 获取进程 pid 的直接子进程。

      参数

      • pid: number

      返回 Promise<Proc[]>

      子进程 ID 数组,如果进程未找到则为空

    • 根据类型(使用 this.prefix)检索作用域变量。

      参数

      • name: string

      返回 Promise<VimValue>

    • 将原始用户输入排队。与 |nvim_feedkeys()| 不同,这使用了一个低级输入缓冲区,并且调用是非阻塞的(输入由事件循环异步处理)。

      在执行错误时:不会失败,但会更新 v:errmsg。

      注意:|keycodes| 如被翻译,因此 "<" 是特殊的。要输入一个字面上的 "<",请发送.

      注意:对于鼠标事件,请使用 |nvim_input_mouse()|。伪键形式 "<col,row>" 自 |api-level| 6 起已弃用。

      参数

      • keys: string

        要输入的内容

      返回 Promise<number>

    • 从 GUI 发送鼠标事件。

      调用是非阻塞的。它不会等待任何结果操作,而是将事件排队,以便事件循环很快处理。

      注意:目前,这不支持通过在循环中多次调用它来“编写”多个鼠标事件:中间鼠标位置将被忽略。它应该用于在 GUI 中实现实时鼠标输入。已弃用的伪键形式("<col,row>")的 |nvim_input()| 具有相同的限制。

      参数

      • button: string

        鼠标按钮:其中之一为 "left"、"right"、"middle"、"wheel"。

      • action: string

        对于普通按钮,其中之一为 "press"、"drag"、"release"。对于滚轮,其中之一为 "up"、"down"、"left"、"right"。

      • modifier: string

        每个修饰符用单个字符表示的字符串。与按键相同,只是 "-" 分隔符是可选的,因此 "C-A-"、"c-a" 和 "CA" 都可以用于指定 Ctrl+Alt+单击。

      • grid: number

        如果客户端使用 |ui-multigrid| 则为网格编号,否则为 0。

      • row: number

        鼠标行位置(从零开始,如重绘事件)

      • col: number

        鼠标列位置(从零开始,如重绘事件)

      返回 Promise<any>

    • 返回监听名为 eventName 的事件的监听器数量。

      参数

      • eventName: string | symbol

        正在监听的事件的名称

      返回值 number

      v3.2.0

    • 返回名为 eventName 的事件的监听器数组的副本。

      server.on('connection', (stream) => {
      console.log('someone connected!');
      });
      console.log(util.inspect(server.listeners('connection')));
      // Prints: [ [Function] ]

      参数

      • eventName: string | symbol

      返回 Function[]

      v0.1.26

    • request 本质上是一样的,除了你可以选择等待 promise 解析

      参数

      • name: string
      • args: any[]

      返回 void

    • emitter.removeListener() 的别名。

      参数

      • eventName: string | symbol
      • listener: ((...args: any[]) => void)
          • (...args): void
          • 参数

            • Rest...args: any[]

            返回 void

      返回 this

      v10.0.0

    • listener 函数添加到名为 eventName 的事件的监听器数组的末尾。不会检查 listener 是否已添加。多次调用传递相同的 eventNamelistener 组合将导致 listener 被添加并多次调用。

      server.on('connection', (stream) => {
      console.log('someone connected!');
      });

      返回对 EventEmitter 的引用,以便可以链接调用。

      默认情况下,事件监听器按添加顺序调用。emitter.prependListener() 方法可以用作替代方法,将事件监听器添加到监听器数组的开头。

      const myEE = new EventEmitter();
      myEE.on('foo', () => console.log('a'));
      myEE.prependListener('foo', () => console.log('b'));
      myEE.emit('foo');
      // Prints:
      // b
      // a

      参数

      • eventName: string | symbol

        事件的名称。

      • listener: ((...args: any[]) => void)

        回调函数

          • (...args): void
          • 参数

            • Rest...args: any[]

            返回 void

      返回 this

      v0.1.101

    • 为名为 eventName 的事件添加一个一次性listener 函数。下次触发 eventName 时,此监听器将被删除,然后调用。

      server.once('connection', (stream) => {
      console.log('Ah, we have our first user!');
      });

      返回对 EventEmitter 的引用,以便可以链接调用。

      默认情况下,事件监听器按添加顺序调用。emitter.prependOnceListener() 方法可以用作替代方法,将事件监听器添加到监听器数组的开头。

      const myEE = new EventEmitter();
      myEE.once('foo', () => console.log('a'));
      myEE.prependOnceListener('foo', () => console.log('b'));
      myEE.emit('foo');
      // Prints:
      // b
      // a

      参数

      • eventName: string | symbol

        事件的名称。

      • listener: ((...args: any[]) => void)

        回调函数

          • (...args): void
          • 参数

            • Rest...args: any[]

            返回 void

      返回 this

      v0.3.0

    • 解析 VimL 表达式

      TODO: 返回类型,请参阅 :help

      参数

      • expr: string
      • flags: string
      • highlight: boolean

      返回值 Promise<object>

    • listener 函数添加到名为 eventName 的事件的监听器数组的开头。不会检查 listener 是否已添加。多次调用传递相同的 eventNamelistener 组合将导致 listener 被添加并多次调用。

      server.prependListener('connection', (stream) => {
      console.log('someone connected!');
      });

      返回对 EventEmitter 的引用,以便可以链接调用。

      参数

      • eventName: string | symbol

        事件的名称。

      • listener: ((...args: any[]) => void)

        回调函数

          • (...args): void
          • 参数

            • Rest...args: any[]

            返回 void

      返回 this

      v6.0.0

    • 为名为 eventName 的事件添加一个一次性listener 函数到监听器数组的_开头_。下次触发 eventName 时,此监听器将被删除,然后调用。

      server.prependOnceListener('connection', (stream) => {
      console.log('Ah, we have our first user!');
      });

      返回对 EventEmitter 的引用,以便可以链接调用。

      参数

      • eventName: string | symbol

        事件的名称。

      • listener: ((...args: any[]) => void)

        回调函数

          • (...args): void
          • 参数

            • Rest...args: any[]

            返回 void

      返回 this

      v6.0.0

    • 返回名为 eventName 的事件的监听器数组的副本,包括任何包装器(例如由 .once() 创建的包装器)。

      const emitter = new EventEmitter();
      emitter.once('log', () => console.log('log once'));

      // Returns a new Array with a function `onceWrapper` which has a property
      // `listener` which contains the original listener bound above
      const listeners = emitter.rawListeners('log');
      const logFnWrapper = listeners[0];

      // Logs "log once" to the console and does not unbind the `once` event
      logFnWrapper.listener();

      // Logs "log once" to the console and removes the listener
      logFnWrapper();

      emitter.on('log', () => console.log('log persistently'));
      // Will return a new Array with a single function bound by `.on()` above
      const newListeners = emitter.rawListeners('log');

      // Logs "log persistently" twice
      newListeners[0]();
      emitter.emit('log');

      参数

      • eventName: string | symbol

      返回 Function[]

      v9.4.0

    • 删除所有监听器,或指定 eventName 的监听器。

      从代码中的其他地方删除添加的监听器是一种不好的做法,尤其是在 EventEmitter 实例是由其他组件或模块(例如套接字或文件流)创建时。

      返回对 EventEmitter 的引用,以便可以链接调用。

      参数

      • 可选event: string | symbol

      返回 this

      v0.1.26

    • 从名为 eventName 的事件的监听器数组中删除指定的 listener

      const callback = (stream) => {
      console.log('someone connected!');
      };
      server.on('connection', callback);
      // ...
      server.removeListener('connection', callback);

      removeListener() 最多将从侦听器数组中删除侦听器的单个实例。如果同一个侦听器已多次添加到指定 eventName 的侦听器数组中,则必须多次调用 removeListener() 来删除每个实例。

      一旦事件发出,所有在发出时附加到该事件的侦听器将按顺序调用。这意味着任何在事件发出之后 和最后一个侦听器完成执行之前 调用的 removeListener()removeAllListeners() 都不会从正在进行的 emit() 中将其删除。后续事件的行为将按预期进行。

      const myEmitter = new MyEmitter();

      const callbackA = () => {
      console.log('A');
      myEmitter.removeListener('event', callbackB);
      };

      const callbackB = () => {
      console.log('B');
      };

      myEmitter.on('event', callbackA);

      myEmitter.on('event', callbackB);

      // callbackA removes listener callbackB but it will still be called.
      // Internal listener array at time of emit [callbackA, callbackB]
      myEmitter.emit('event');
      // Prints:
      // A
      // B

      // callbackB is now removed.
      // Internal listener array [callbackA]
      myEmitter.emit('event');
      // Prints:
      // A

      由于侦听器使用内部数组进行管理,因此调用此方法将改变被删除的侦听器之后注册的任何侦听器的位置索引。这不会影响侦听器被调用的顺序,但这意味着 emitter.listeners() 方法返回的侦听器数组的任何副本都需要重新创建。

      当一个函数作为处理程序多次添加到一个事件中(如以下示例),removeListener() 将删除最近添加的实例。在示例中,once('ping') 侦听器被删除

      const ee = new EventEmitter();

      function pong() {
      console.log('pong');
      }

      ee.on('ping', pong);
      ee.once('ping', pong);
      ee.removeListener('ping', pong);

      ee.emit('ping');
      ee.emit('ping');

      返回对 EventEmitter 的引用,以便可以链接调用。

      参数

      • eventName: string | symbol
      • listener: ((...args: any[]) => void)
          • (...args): void
          • 参数

            • Rest...args: any[]

            返回 void

      返回 this

      v0.1.26

    • 用内部表示替换终端代码和 |keycodes|(, , ...)在一个字符串中。

      参数

      • str: string

        要转换的字符串。

      • fromPart: boolean

        旧版 Vim 参数。通常为 true。

      • doIt: boolean

        也翻译. 如果 special 为 false,则忽略。

      • special: boolean

        替换 |keycodes|,例如变成 "\n" 字符。

      返回 Promise<string>

    • 在完成弹出菜单中选择一项。

      如果 |ins-completion| 未激活,则此 API 调用将被静默忽略。对于使用 |ui-popupmenu| 控制弹出菜单的外部 UI 很有用。也可以在映射中使用;使用|:map-cmd| 确保映射不会结束完成模式。

      参数

      • item: number

        要选择的项目的索引(从零开始)。值 -1 表示不选择任何内容并恢复原始文本。

      • insert: boolean

        是否应将选择插入缓冲区。

      • finish: boolean

        完成完成并关闭弹出菜单。意味着 insert

      • opts: object = {}

        可选参数。为将来使用保留。

      返回 Promise<any>

    • 识别 nvim 的客户端。可以多次调用,但后续调用将删除更早的信息,如果信息仍然有效,则应重新发送。(如果库首先识别通道,然后使用该库的插件稍后覆盖该信息,则可能会发生这种情况)

      参数

      • name: string
      • version: object
      • type: string
      • methods: object
      • attributes: object

      返回 void

    • 默认情况下,EventEmitter 在为特定事件添加超过 10 个侦听器时会打印警告。这是一个有用的默认值,有助于查找内存泄漏。emitter.setMaxListeners() 方法允许为该特定 EventEmitter 实例修改限制。该值可以设置为 Infinity(或 0)以指示无限数量的侦听器。

      返回对 EventEmitter 的引用,以便可以链接调用。

      参数

      • n: number

      返回 this

      v0.3.5

    • 设置作用域选项

      参数

      • name: string
      • value: VimValue

      返回 void | Promise<void>

    • 设置作用域变量

      参数

      • name: string
      • value: VimValue

      返回 Promise<void>

    • 设置 v: 变量,如果它不是只读的。

      参数

      • name: string

        变量名称

      • value: VimValue

        变量值

      返回 Promise<any>

    • 计算text占用的显示单元格数量。每个字符都算作一个单元格。

      参数

      • str: string

        一些文本

      返回 Promise<number>

      单元格数量

    • TODO: 文档

      参数

      • width: number

        新的请求宽度

      • height: number

        新的请求高度

      返回 Promise<void>

    • 告诉 Nvim 调整网格大小。触发一个 grid_resize 事件,包含请求的网格大小,或者如果超过大小限制则包含最大大小。

      对于无效的网格句柄,会失败并报错。

      参数

      • grid: number

        要修改的网格句柄

      • width: number

        新的请求宽度

      • height: number

        新的请求高度

      返回 Promise<void>

    • 返回名为 eventName 的事件的监听器数组的副本。

      对于EventEmitter,这与在发射器上调用.listeners的效果完全相同。

      对于EventTarget,这是获取事件目标事件监听器的唯一方法。这对于调试和诊断很有用。

      const { getEventListeners, EventEmitter } = require('events');

      {
      const ee = new EventEmitter();
      const listener = () => console.log('Events are fun');
      ee.on('foo', listener);
      getEventListeners(ee, 'foo'); // [listener]
      }
      {
      const et = new EventTarget();
      const listener = () => console.log('Events are fun');
      et.addEventListener('foo', listener);
      getEventListeners(et, 'foo'); // [listener]
      }

      参数

      • emitter: EventEmitter | DOMEventTarget
      • name: string | symbol

      返回 Function[]

      v15.2.0

    • 一个类方法,返回为给定的eventName注册到给定的emitter上的监听器数量。

      const { EventEmitter, listenerCount } = require('events');
      const myEmitter = new EventEmitter();
      myEmitter.on('event', () => {});
      myEmitter.on('event', () => {});
      console.log(listenerCount(myEmitter, 'event'));
      // Prints: 2

      参数

      • emitter: EventEmitter

        要查询的发射器

      • eventName: string | symbol

        事件名称

      返回值 number

      v0.9.12

      自 v3.2.0 起 - 使用listenerCount 代替。

    • const { on, EventEmitter } = require('events');

      (async () => {
      const ee = new EventEmitter();

      // Emit later on
      process.nextTick(() => {
      ee.emit('foo', 'bar');
      ee.emit('foo', 42);
      });

      for await (const event of on(ee, 'foo')) {
      // The execution of this inner block is synchronous and it
      // processes one event at a time (even with await). Do not use
      // if concurrent execution is required.
      console.log(event); // prints ['bar'] [42]
      }
      // Unreachable here
      })();

      返回一个AsyncIterator,它迭代eventName事件。如果EventEmitter发出'error',它将抛出异常。它在退出循环时会移除所有监听器。每次迭代返回的value是一个数组,包含了发射的事件参数。

      一个AbortSignal可以用来取消等待事件

      const { on, EventEmitter } = require('events');
      const ac = new AbortController();

      (async () => {
      const ee = new EventEmitter();

      // Emit later on
      process.nextTick(() => {
      ee.emit('foo', 'bar');
      ee.emit('foo', 42);
      });

      for await (const event of on(ee, 'foo', { signal: ac.signal })) {
      // The execution of this inner block is synchronous and it
      // processes one event at a time (even with await). Do not use
      // if concurrent execution is required.
      console.log(event); // prints ['bar'] [42]
      }
      // Unreachable here
      })();

      process.nextTick(() => ac.abort());

      参数

      • emitter: EventEmitter
      • eventName: string

        正在监听的事件的名称

      • Optionaloptions: StaticEventEmitterOptions

      返回 AsyncIterableIterator<any>

      它迭代emitter发射的eventName事件

      v13.6.0, v12.16.0

    • 创建一个Promise,当EventEmitter发出给定事件时,该Promise就会被fulfilled,如果EventEmitter在等待时发出'error',则该Promise会被rejected。该Promise将解析为一个数组,其中包含发出给定事件的所有参数。

      此方法有意保持通用性,并适用于 Web 平台的 EventTarget 接口,该接口没有特殊的'error' 事件语义,也不监听'error' 事件。

      const { once, EventEmitter } = require('events');

      async function run() {
      const ee = new EventEmitter();

      process.nextTick(() => {
      ee.emit('myevent', 42);
      });

      const [value] = await once(ee, 'myevent');
      console.log(value);

      const err = new Error('kaboom');
      process.nextTick(() => {
      ee.emit('error', err);
      });

      try {
      await once(ee, 'myevent');
      } catch (err) {
      console.log('error happened', err);
      }
      }

      run();

      仅当使用events.once()等待另一个事件时,才会对'error' 事件进行特殊处理。如果使用events.once()等待'error' 事件本身,则将其视为任何其他类型的事件,不会进行特殊处理。

      const { EventEmitter, once } = require('events');

      const ee = new EventEmitter();

      once(ee, 'error')
      .then(([err]) => console.log('ok', err.message))
      .catch((err) => console.log('error', err.message));

      ee.emit('error', new Error('boom'));

      // Prints: ok boom

      可以使用AbortSignal取消等待事件。

      const { EventEmitter, once } = require('events');

      const ee = new EventEmitter();
      const ac = new AbortController();

      async function foo(emitter, event, signal) {
      try {
      await once(emitter, event, { signal });
      console.log('event emitted!');
      } catch (error) {
      if (error.name === 'AbortError') {
      console.error('Waiting for the event was canceled!');
      } else {
      console.error('There was an error', error.message);
      }
      }
      }

      foo(ee, 'foo', ac.signal);
      ac.abort(); // Abort waiting for the event
      ee.emit('foo'); // Prints: Waiting for the event was canceled!

      参数

      • emitter: NodeEventTarget
      • eventName: string | symbol
      • Optionaloptions: StaticEventEmitterOptions

      返回 Promise<any[]>

      v11.13.0, v10.16.0

    • 参数

      • emitter: DOMEventTarget
      • eventName: string
      • Optionaloptions: StaticEventEmitterOptions

      返回 Promise<any[]>