TaskQueue
TaskQueue
是一个用于管理异步任务的类。它不提供控制并发性的方法;所有任务运行器都异步执行。
导入
import { TaskQueue } from "@tai-kun/surrealdb/utils";
.constructor()
new TaskQueue();
参数
无。
返回值
如果通过 new
调用,TaskQueue
将返回其实例。
.count
实例 属性 只读
表示当前添加到队列中的任务运行器的数量。
.add()
实例 方法
.add
方法将任务运行器添加到队列中。
add<T>( runner: (args: TaskRunnerArgs) => T | PromiseLike<T>, options?: TaskOptions,): StatefulPromise<T>;
参数
runner
任务运行器。任务运行器的参数包括包含中止信号 signal
的 TaskRunnerArgs
。
options
任务运行器的选项。可以传递此任务运行器的中止信号。
返回值
返回一个以任务运行器的返回值为结果的 StatefulPromise
。
例子
import { TaskQueue } from "@tai-kun/surrealdb/utils";
const queue = new TaskQueue();const promise = queue.add(async ({ signal }) => { const response = await fetch("https://example.com/", { signal }); return await response.text();});
const text = await promise;console.log(text);
.idle()
实例 方法
.idle
方法是一个用于等待队列为空的函数。只有在任务运行器完成(无论成功或失败)后,它才会从队列中移除。因此,队列为空意味着所有任务运行器都已完成执行。
idle(): StatefulPromise<void>;
参数
无。
返回值
返回一个以 void
为结果的 StatefulPromise
。
例子
下面的例子等待队列中添加的任务运行器完成,无论它们是成功还是失败:
import { TaskQueue } from "@tai-kun/surrealdb/utils";
const queue = new TaskQueue();const results: string[] = [];queue.add(async () => { results.push("Hello");});queue.add(() => { throw null;});
console.log(queue.count);
await queue.idle();
console.log(queue.count);console.log(results);
输出:
20[ 'Hello' ]
在上面的例子中,throw null
没有被捕获,脚本正常结束。要注意到任务运行器的错误,需要单独进行错误处理。
.abort()
实例 方法
.abort
方法用于向所有任务运行器的 signal
发送中止事件。
abort(reason?: unknown): void;
参数
reason
中止的原因。
返回值
无。