Skip to content

Одиночный воркер

useWorker() — composable основного потока, оборачивает один лениво создаваемый воркер.

ts
const { run, isRunning, progress, error, cancel, warmup } = useWorker<typeof import('./x.worker')>(
  () => new Worker(new URL('./x.worker.ts', import.meta.url), { type: 'module' }),
  { idleTimeout: 30_000, retries: 0 },
)

// Опционально: заранее создать воркер, не выполняя задачу (избегает задержки холодного старта при первом запуске)
await warmup()

const output = await run(input, { transfer: [input.buffer], signal: controller.signal })

Вход run() пропускается через toRaw() перед отправкой — значение ref/reactive, прочитанное прямо из компонента (() => list.value), не клонируется структурно как живой Proxy, поэтому отправляется именно сырой снапшот.

Опции

idleTimeout

number | false · по умолчанию: 30000

Воркер самозавершается после стольки мс простоя (освобождает память); следующий run() прозрачно пересоздаёт его.

retries

number · по умолчанию: 0

Автоматические повторы при отклонении — никогда не применяются к отменам (AbortError всегда отклоняется немедленно). См. Стратегия повторов с backoff.

retryDelay

(attempt: number) => number

Задержка перед каждым повтором — см. Стратегия повторов с backoff.

hardCancelOnAbort

boolean · по умолчанию: false

При abort() немедленно завершить и пересоздать воркер вместо ожидания кооперативной обработки через ctx.signal.

cache

{ cache: 'lru', maxCacheSize?: number }

Мемоизирует результаты по входным данным — см. Мемоизация / кэш результатов.

streaming

boolean · по умолчанию: false

Включает ctx.reportChunk()/chunks — см. Потоковая передача результатов.

Возвращаемое значение

run(input, options?)

(input: In, options?: { transfer?: Transferable[]; signal?: AbortSignal }) => Promise<Out>

isRunning

ComputedRef<boolean>

progress

ShallowRef<number>

error

ShallowRef<WorkerError | null>

cancel()

() => void

Отменяет текущий вызов(ы) run(), не получившие собственный signal.

warmup()

() => Promise<void>

Заранее создаёт воркер без выполнения задачи (полезно, чтобы избежать задержки холодного старта).

chunks

ShallowRef<unknown[]> | undefined

Присутствует только при streaming: true — см. Потоковая передача результатов.

Автоматический terminate() при onScopeDispose, если useWorker() вызван внутри активной effect-области.