跳转到内容

TaskEmitter

TaskEmitter 是由 TaskQueue 管理的异步任务的事件发射器类。

导入

import { TaskEmitter } from "@tai-kun/surrealdb/utils";

.constructor()

new TaskEmitter<T>();

参数

T

用键值对表示事件名称和事件所接受的参数(数组)的类型。

返回值

如果通过 new 调用,TaskEmitter 将返回其实例。

.on() 实例 方法

.on 是一个用于向事件发射器注册事件监听器的函数。如果尝试多次向同一个事件注册同一个函数,除了第一次之外,其余注册操作都将被忽略。

on(event: string | number, listener: TaskListener): void;

参数

event

要注册事件监听器的事件名称。

listener

要注册的事件监听器。此函数将接收与 TaskQueue 的任务运行器相同的参数,之后将接收通过 .emit 传递的可变数量的参数。

返回值

无。

例子

下面的例子捕获 “log” 事件,并将传递给发射器的值输出到标准输出:

import { TaskEmitter } from "@tai-kun/surrealdb/utils";
type Events = {
log: string[];
};
const emitter = new TaskEmitter<Events>();
emitter.on("log", (_, ...args) => {
console.log(...args);
});
emitter.emit("log", "Hello");
emitter.emit("log", "World", "!!!");
await emitter.idle();

输出:

Hello
World !!!

.off() 实例 方法

.off 是一个用于从事件发射器注销事件监听器的函数。如果省略事件监听器,则将注销与目标事件名称关联的所有事件监听器。

off(event: string | number, listener?: TaskListener): void;

参数

event

要注销事件监听器的事件名称。

listener

要注销的事件监听器。如果省略此参数,则将注销与目标 event 关联的所有事件监听器。

返回值

无。

.once() 实例 方法

.once.on 类似,但它只捕获一次事件。并且它不使用回调函数,而是通过返回值 StatefulPromise 接收值。

once(
event: string | Number,
options?: TaskListenerOptions,
): StatefulPromise<unknown[]>;

例子

下面的例子只捕获一次 “log” 事件,并将传递给发射器的值输出到标准输出:

import { TaskEmitter } from "@tai-kun/surrealdb/utils";
type Events = {
log: string[];
};
const emitter = new TaskEmitter<Events>();
const promise = emitter.once("log");
emitter.emit("log", "Hello");
emitter.emit("log", "World", "!!!");
const recived = await promise;
console.log(recived);
await emitter.idle();

输出:

[ 'Hello' ]

参数

event

要等待的事件名称。

options

事件监听器的选项。可以传递中止信号。

返回值

返回一个 StatefulPromise,该 StatefulPromise 将通过 .emit 的参数(数组)来解析。

.emit() 实例 方法

.emit 是一个用于向事件监听器发送值的函数。

emit(
event: string | number,
...args: unknown[]
): undefined | StatefulPromise<unknown>[];

参数

event

要发送到的事件名称。

args

要发送到目标事件监听器的值。

返回值

如果没有事件监听器,则返回 undefined。如果有事件监听器,则返回一个 StatefulPromise 数组,该数组将等待事件监听器解析/拒绝。通常不需要处理此 StatefulPromise。当需要在当前上下文中等待事件引起的副作用,或者关心事件监听器的解析/拒绝时,可以使用它。

.idle() 实例 方法

.idle 是一个用于等待所有当前正在运行的事件监听器完成的函数。

idle(): StatefulPromise<void>;

参数

无。

返回值

返回一个 void 解析的 StatefulPromise

.abort() 实例 方法

.abort 是一个用于向所有事件监听器的 signal 发送中止事件的函数。

abort(reason?: unknown): void;

参数

reason

中止的原因。

返回值

无。