コンテンツにスキップ

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);

出力:

2
0
[ 'Hello' ]

上記の例では throw null がどこにも補足されずに、スクリプトは正常に終了します。タスクランナーのエラーに気づくには、個別にエラーハンドリングする必要があります。

.abort() インスタンス メソッド

.abort は全タスクランナーの signal に中止イベントを発送する関数です。

abort(reason?: unknown): void;

引数

reason

中止の理由です。

返値

なし。