コンテンツにスキップ
asyncmux
日本語
Esc
↑↓移動↵開く⌘Jプレビュー
このページの内容

エラー

asyncmux が公開するエラークラスと、メッセージを言語別に切り替える setErrorMessage の使い方をまとめます。

ErrorBase

asyncmux のエラークラスの基底クラスです。Error を継承し、メッセージを言語別に切り替えられます。

import { ErrorBase } from "asyncmux";

class MyError extends ErrorBase<undefined> {
  public constructor(options?: ErrorOptions) {
    super("My error message", options);
  }
}
プロパティ型
meta?TMeta

エラーに付随する任意のメタデータです。メッセージを関数で生成する場合に参照できます。

型TMeta
prefix?string | undefined

メッセージの先頭に付与する文字列です(静的プロパティー)。

型string | undefined

メッセージは message プロパティーを参照したときに解決されます。言語は i18n-error-base が valibot のグローバル設定(getGlobalConfig().lang)から取得し、既定値は "en" です。

import { setGlobalConfig } from "valibot";
import { LockReleasedError } from "asyncmux";

setGlobalConfig({ lang: "ja" });

new LockReleasedError().message; // "ロックはすでに解放済みです。"

setErrorMessage()

エラークラスに言語別のメッセージを登録します。組み込みのエラーに新しい言語を追加したり、既存のメッセージを上書きしたりできます。

function setErrorMessage(
  reference: typeof ErrorBase,
  message: string | ((meta: unknown) => string),
  lang: string | Iterable<string>,
): void;

reference には ErrorBase を継承したクラスを指定します。

import { setErrorMessage, ReentrantLockError } from "asyncmux";

setErrorMessage(ReentrantLockError, "同じロックを再取得することはできません", "ja");

第 2 引数に関数を渡すと、meta を受け取ってメッセージを組み立てられます。第 3 引数に複数の言語コードを渡すと、まとめて登録します。

DecoratorSupportError

Stage 3 のデコレーターに対応していない環境で @asyncmux を使ったときに投げられます。

class DecoratorSupportError extends ErrorBase<undefined> {
  constructor(options?: ErrorOptions);
}

LockReleasedError

解放済みのロックに対して release() を呼び出したときに投げられます。

class LockReleasedError extends ErrorBase<undefined> {
  constructor(options?: ErrorOptions);
}

ReentrantLockError

デッドロックになる再入を検出したときに投げられます。検出の条件は並行性モデルを参照してください。

class ReentrantLockError extends ErrorBase<undefined> {
  constructor(options?: ErrorOptions);
}

組み込みメッセージ

asyncmux は組み込みのエラーに英語と日本語のメッセージを登録しています。

クラス name 英語 日本語
DecoratorSupportError AsyncmuxDecoratorSupportError Requires Stage 3 decorator support ステージ 3 のデコレーターのサポートが必要です
LockReleasedError AsyncmuxLockReleasedError Lock id already released ロックはすでに解放済みです。
ReentrantLockError AsyncmuxReentrantLockError Cannot acquire a lock while the same lock is already held 保持中のロックを再度獲得することはできません

各クラスは ErrorOptions を受け取るため、cause で元のエラーを保持できます。

throw new ReentrantLockError({ cause: originalError });

このページは役に立ちましたか?