Skip to main content

abort_signal_timeout

Function abort_signal_timeout 

Source
pub(crate) fn abort_signal_timeout(
    it: &mut Interp,
    _t: Value,
    a: &[Value],
) -> Result<Value, Value>
Expand description

AbortSignal.timeout(ms)(ES2022)。指定ミリ秒後に自動的に abort する AbortSignal を返す、fetch のタイムアウト実装で最頻出のイディオム。この エンジンの setTimeout は実時間を計測せずマクロタスクキューに積むだけの 簡略実装のため、正確な実時間待機ではなくキュー順序に従った近似になる (既存の setTimeout 全体の簡略化と同じ水準)。ネイティブ関数はクロージャで ms を束縛できないため、AbortController/setTimeout を組み合わせる JS ソースを組み立てて eval_source で実行する。 AbortSignal.timeout(ms)。以前は c.abort() を引数無しで呼んでおり、 signal.reason が仕様どおりの TimeoutError(DOM Level 4 legacy code 23)ではなく既定の AbortError(code 20)になっていたバグ。 abort_signal_any と同じ「グローバル一時変数経由で Rust 側の値を JS へ 渡す」パターンで、事前に構築した TimeoutErrorDOMException を 束縛してから c.abort(reason) を呼ぶ。