es-promise-ext
Version:
Native promise extensions for javascript and typescript.
67 lines (66 loc) • 2.2 kB
TypeScript
export interface Option {
canceller?: {
cancelled?: boolean;
};
progress?: (subResult: any, step: number, total: number) => any;
skipIfError?: boolean;
}
/**
* Creates a Promise that is resolved sequentially with an array of results when all of the provided Promises resolve, or rejected when any Promise is rejected.
*
* @param {U} asyncFunctions
* - An array of async functions.
*
* @return {Promise<{ [K in keyof U]: U[K] extends (...args: any[]) => infer R ? Awaited<R> : Awaited<U[K]> }>}
* A new Promise.
*
* @example
* promiseSequence(
* [
* () => Promise.resolve(1),
* () => Promise.resolve(2),
* () => Promise.resolve(3)
* ]
* )
* // return [1,2,3] in the subsequent promise
*/
export default function sequence<U extends readonly unknown[] | []>(asyncFunctions: U): Promise<{
[K in keyof U]: U[K] extends (...args: any[]) => infer R ? Awaited<R> : Awaited<U[K]>;
}>;
/**
* Creates a Promise that is resolved sequentially with an array of results when all of the provided Promises resolve, or rejected when any Promise is rejected.
*
* @param {U} asyncFunctions
* - An array of async functions.
*
* @param {Option} option
* - canceller: object. Set `canceller.cancelled = true` stopping the sequence
* - progress: `(subResult, step, total) => any`. To show the progress and the sub result
* - skipIfError: boolean
*
* @return {Promise<{ [K in keyof U]: U[K] extends (...args: any[]) => infer R ? Awaited<R> : Awaited<U[K]> }>}
* A new Promise.
*
* @example
* promiseSequence(
* [
* () => Promise.resolve(1),
* () => Promise.resolve(2),
* () => Promise.resolve(3)
* ],
* {
* canceller: { cancelled: false },
* // set to true later
* progress: (subResult, step, total) =>
* {
* console.log(subResult)
* console.log(`${((step+1) / total)}%`)
* },
* skipIfError: true
* }
* )
* // return [1,2,3] in the subsequent promise
*/
export default function sequence<U extends readonly unknown[] | []>(asyncFunctions: U, option: Option): Promise<{
[K in keyof U]: U[K] extends (...args: any[]) => infer R ? Awaited<R> : Awaited<U[K]>;
}>;