コンテンツにスキップ

makeAbortApi

makeAbortApi は中止シグナルと、それに関連付けられた中止関数を作成する関数です。

インポート

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

使い方

function makeAbortApi(signal?: AbortSignal): [
signal: AbortSignal,
abort: (reason?: unknown) => void,
];

引数

signal

関連付ける中止シグナルです。

返値

次の順番に並んだ配列を返します。

signal

中止シグナルです。初期状態で中断されていることはありません。

abort

中止シグナルに "abort" イベントを発送します。オプションで 1 つの引数 reason を受け取ることができ、"abort" イベントを経由して中止の理由を伝えることができます。

次の例では、引数なしで Abort API を作成します:

import { makeAbortApi } from "@tai-kun/surrealdb/utils";
const [signal, abort] = makeAbortApi();
abort();

上記の例は、new AbortController() とほとんど同じ意味を持ちます。AbortController と異なる点は、makeAbortApi がオブジェクトではなく配列を返すところです。

次の例では、関連付ける中止シグナルを指定して Abort API を作成します:

import { makeAbortApi } from "@tai-kun/surrealdb/utils";
const controller = new AbortController();
controller.signal.addEventListener("abort", function() {
console.log("controller.signal", this.reason);
});
const [signal] = makeAbortApi(controller.signal);
signal.addEventListener("abort", function() {
console.log("signal", this.reason);
});
controller.abort("test");

出力:

controller.signal test
signal test

中止イベントは Abort API から中止しても関連付けられた中止シグナルへ伝播します:

import { makeAbortApi } from "@tai-kun/surrealdb/utils";
const controller = new AbortController();
controller.signal.addEventListener("abort", function() {
console.log("controller.signal", this.reason);
});
const [signal, abort] = makeAbortApi(controller.signal);
signal.addEventListener("abort", function() {
console.log("signal", this.reason);
});
abort("test");

出力:

controller.signal test
signal test