跳转到内容

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,其通过 .emit 的参数(数组)解析。

.emit() 实例 方法

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

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

参数

event

目标事件名称。

args

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

返回值

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

.idle() 实例 方法

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

idle(): StatefulPromise<void>;

参数

无。

返回值

返回一个以 void 解析的 StatefulPromise

.abort() 实例 方法

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

abort(reason?: unknown): void;

参数

reason

中止的原因。

返回值

无。