Files
fuel-price/.agents/skills/vueuse-functions/references/useAsyncQueue.md
Ovidiu U 4a3ce4cc1d
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (8.3) (push) Has been cancelled
tests / ci (8.4) (push) Has been cancelled
tests / ci (8.5) (push) Has been cancelled
docs: add advanced skills for Vitest, Pinia, and Vue built-ins
Add comprehensive reference documentation for:
- Vitest: environments, projects/workspaces, type testing, vi utilities
- Pinia: HMR, Nuxt integration, SSR setup
- Vue: built-in components (Transition, Teleport, Suspense, KeepAlive) and advanced directives
2026-04-11 16:28:36 +01:00

137 lines
2.6 KiB
Markdown

---
category: Utilities
---
# useAsyncQueue
Executes each asynchronous task sequentially and passes the current task result to the next task.
## Usage
```ts
import { useAsyncQueue } from '@vueuse/core'
function p1() {
return new Promise((resolve) => {
setTimeout(() => {
resolve(1000)
}, 10)
})
}
function p2(result: number) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(1000 + result)
}, 20)
})
}
const { activeIndex, result } = useAsyncQueue([p1, p2])
console.log(activeIndex.value) // current pending task index
console.log(result) // the tasks result
```
### Result State
Each task in the result array has a `state` and `data` property:
```ts
interface UseAsyncQueueResult<T> {
state: 'aborted' | 'fulfilled' | 'pending' | 'rejected'
data: T | null
}
```
### Interrupt on Failure
By default, if a task fails, subsequent tasks will not be executed. Set `interrupt: false` to continue executing even after failures.
```ts
const { result } = useAsyncQueue([p1, p2], {
interrupt: false, // continue even if p1 fails
})
```
### Callbacks
```ts
const { result } = useAsyncQueue([p1, p2], {
onError() {
console.log('A task failed')
},
onFinished() {
console.log('All tasks completed (or interrupted)')
},
})
```
### Abort Signal
You can pass an `AbortSignal` to cancel the queue execution.
```ts
const controller = new AbortController()
const { result } = useAsyncQueue([p1, p2], {
signal: controller.signal,
})
// Later, abort the queue
controller.abort()
```
## Type Declarations
```ts
export type UseAsyncQueueTask<T> = (...args: any[]) => T | Promise<T>
type MapQueueTask<T extends any[]> = {
[K in keyof T]: UseAsyncQueueTask<T[K]>
}
export interface UseAsyncQueueResult<T> {
state: "aborted" | "fulfilled" | "pending" | "rejected"
data: T | null
}
export interface UseAsyncQueueReturn<T> {
activeIndex: ShallowRef<number>
result: T
}
export interface UseAsyncQueueOptions {
/**
* Interrupt tasks when current task fails.
*
* @default true
*/
interrupt?: boolean
/**
* Trigger it when the tasks fails.
*
*/
onError?: () => void
/**
* Trigger it when the tasks ends.
*
*/
onFinished?: () => void
/**
* A AbortSignal that can be used to abort the task.
*/
signal?: AbortSignal
}
/**
* Asynchronous queue task controller.
*
* @see https://vueuse.org/useAsyncQueue
* @param tasks
* @param options
*/
export declare function useAsyncQueue<T extends any[], S = MapQueueTask<T>>(
tasks: S & Array<UseAsyncQueueTask<any>>,
options?: UseAsyncQueueOptions,
): UseAsyncQueueReturn<{
[P in keyof T]: UseAsyncQueueResult<T[P]>
}>
```