signal-desktop/ts/util/waitForAll.ts

23 lines
506 B
TypeScript

// Copyright 2022 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import PQueue from 'p-queue';
import { MINUTE } from './durations';
const MAX_CONCURRENCY = 5;
export async function waitForAll<T>({
tasks,
maxConcurrency = MAX_CONCURRENCY,
}: {
tasks: Array<() => Promise<T>>;
maxConcurrency?: number;
}): Promise<Array<T>> {
const queue = new PQueue({
concurrency: maxConcurrency,
timeout: MINUTE * 30,
throwOnTimeout: true,
});
return queue.addAll(tasks);
}