Skip to content

Commit 22e26dc

Browse files
feat(useAsyncQueue): support in infinite tasks in typescript (#3333)
1 parent 7168535 commit 22e26dc

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

packages/core/useAsyncQueue/index.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ import { reactive, ref } from 'vue-demi'
44

55
export type UseAsyncQueueTask<T> = (...args: any[]) => T | Promise<T>
66

7+
type MapQueueTask<T extends any[]> = {
8+
[K in keyof T]: UseAsyncQueueTask<T[K]>
9+
}
710
export interface UseAsyncQueueResult<T> {
811
state: 'aborted' | 'fulfilled' | 'pending' | 'rejected'
912
data: T | null
@@ -47,19 +50,16 @@ export interface UseAsyncQueueOptions {
4750
* @param tasks
4851
* @param options
4952
*/
50-
export function useAsyncQueue<T1>(tasks: [UseAsyncQueueTask<T1>], options?: UseAsyncQueueOptions): UseAsyncQueueReturn<[UseAsyncQueueResult<T1>]>
51-
export function useAsyncQueue<T1, T2>(tasks: [UseAsyncQueueTask<T1>, UseAsyncQueueTask<T2>], options?: UseAsyncQueueOptions): UseAsyncQueueReturn<[UseAsyncQueueResult<T1>, UseAsyncQueueResult<T2>]>
52-
export function useAsyncQueue<T1, T2, T3>(tasks: [UseAsyncQueueTask<T1>, UseAsyncQueueTask<T2>, UseAsyncQueueTask<T3>], options?: UseAsyncQueueOptions): UseAsyncQueueReturn<[UseAsyncQueueResult<T1>, UseAsyncQueueResult<T2>, UseAsyncQueueResult<T3>]>
53-
export function useAsyncQueue<T1, T2, T3, T4>(tasks: [UseAsyncQueueTask<T1>, UseAsyncQueueTask<T2>, UseAsyncQueueTask<T3>, UseAsyncQueueTask<T4>], options?: UseAsyncQueueOptions): UseAsyncQueueReturn<[UseAsyncQueueResult<T1>, UseAsyncQueueResult<T2>, UseAsyncQueueResult<T3>, UseAsyncQueueResult<T4>]>
54-
export function useAsyncQueue<T1, T2, T3, T4, T5>(tasks: [UseAsyncQueueTask<T1>, UseAsyncQueueTask<T2>, UseAsyncQueueTask<T3>, UseAsyncQueueTask<T4>, UseAsyncQueueTask<T5>], options?: UseAsyncQueueOptions): UseAsyncQueueReturn<[UseAsyncQueueResult<T1>, UseAsyncQueueResult<T2>, UseAsyncQueueResult<T3>, UseAsyncQueueResult<T4>, UseAsyncQueueResult<T5>]>
55-
export function useAsyncQueue<T>(tasks: UseAsyncQueueTask<T>[], options?: UseAsyncQueueOptions): UseAsyncQueueReturn<UseAsyncQueueResult<T>[]>
56-
export function useAsyncQueue<T = any>(tasks: UseAsyncQueueTask<any>[], options: UseAsyncQueueOptions = {}): UseAsyncQueueReturn<UseAsyncQueueResult<T>[]> {
53+
export function useAsyncQueue<T extends any[], S = MapQueueTask<T>>(
54+
tasks: S & Array<UseAsyncQueueTask<any>>,
55+
options?: UseAsyncQueueOptions,
56+
): UseAsyncQueueReturn<{ [P in keyof T]: UseAsyncQueueResult<T[P]> }> {
5757
const {
5858
interrupt = true,
5959
onError = noop,
6060
onFinished = noop,
6161
signal,
62-
} = options
62+
} = options || {}
6363

6464
const promiseState: Record<
6565
UseAsyncQueueResult<T>['state'],
@@ -73,7 +73,7 @@ export function useAsyncQueue<T = any>(tasks: UseAsyncQueueTask<any>[], options:
7373

7474
const initialResult = Array.from(Array.from({ length: tasks.length }), () => ({ state: promiseState.pending, data: null }))
7575

76-
const result = reactive(initialResult) as UseAsyncQueueResult<T>[]
76+
const result = reactive(initialResult) as { [P in keyof T]: UseAsyncQueueResult<T[P]> }
7777

7878
const activeIndex = ref<number>(-1)
7979

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy