--- 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 ``` ## Type Declarations ```ts export type UseAsyncQueueTask = (...args: any[]) => T | Promise type MapQueueTask = { [K in keyof T]: UseAsyncQueueTask } export interface UseAsyncQueueResult { state: "aborted" | "fulfilled" | "pending" | "rejected" data: T | null } export interface UseAsyncQueueReturn { activeIndex: ShallowRef 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>( tasks: S & Array>, options?: UseAsyncQueueOptions, ): UseAsyncQueueReturn<{ [P in keyof T]: UseAsyncQueueResult }> ```