UNPKG

promise-throttle-all

Version:
1 lines 3.35 kB
{"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["/**\n * A Task is a nullary function that returns a promise\n */\nexport type Task<T> = () => Promise<T>\n\nconst notSettled = Symbol(`not-settled`)\n\n/**\n * Run tasks with limited concurency.\n * @param limit - Limit of tasks that run at once.\n * @param tasks - List of tasks to run.\n * @returns A promise that fulfills to an array of the results\n * of the input promises or rejects immediately upon any of\n * the input tasks rejecting.\n * @example\n * ```ts\n * const task1 = () => new Promise((resolve) => {\n * setTimeout(resolve, 100, 1);\n * });\n * const task2 = () => Promise.resolve(2);\n *\n * throttleAll(1, [task1, task2])\n * .then((values) => { console.log(values) });\n * // task2 will run after task1 finishes\n * // logs: `[1, 2]`\n * ```\n */\nexport const throttleAll = <T>(\n limit: number,\n tasks: Task<T>[],\n): Promise<T[]> => {\n if (!Number.isInteger(limit) || limit < 1) {\n throw new TypeError(\n `Expected \\`limit\\` to be a finite number > 0, got \\`${limit}\\` (${typeof limit})`,\n )\n }\n\n if (\n !Array.isArray(tasks) ||\n !tasks.every((task) => typeof task === `function`)\n ) {\n throw new TypeError(\n `Expected \\`tasks\\` to be a list of functions returning a promise`,\n )\n }\n\n return new Promise<T[]>((resolve, reject) => {\n const result: (T | symbol)[] = Array(tasks.length).fill(notSettled)\n\n const entries = tasks.entries()\n\n const next = () => {\n const { done, value } = entries.next()\n\n if (done) {\n const isLast = !result.includes(notSettled)\n\n if (isLast) resolve(result as T[])\n\n return\n }\n\n const [index, task] = value\n\n const onFulfilled = (x: T) => {\n result[index] = x\n next()\n }\n\n task().then(onFulfilled, reject)\n }\n\n // Run next() `limit` times\n Array(limit).fill(0).forEach(next)\n })\n}\n"],"names":[],"mappings":";;;;;;AAKA,MAAM,UAAU,GAAG,MAAM,CAAC,CAAA,WAAA,CAAa,CAAC,CAAA;AAExC;;;;;;;;;;;;;;;;;;;AAmBG;MACU,WAAW,GAAG,CACzB,KAAa,EACb,KAAgB,KACA;IAChB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;QACzC,MAAM,IAAI,SAAS,CACjB,CAAuD,oDAAA,EAAA,KAAK,OAAO,OAAO,KAAK,CAAG,CAAA,CAAA,CACnF,CAAA;AACF,KAAA;AAED,IAAA,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AACrB,QAAA,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAA,QAAA,CAAU,CAAC,EAClD;AACA,QAAA,MAAM,IAAI,SAAS,CACjB,CAAA,gEAAA,CAAkE,CACnE,CAAA;AACF,KAAA;IAED,OAAO,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,KAAI;AAC1C,QAAA,MAAM,MAAM,GAAmB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;AAEnE,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;QAE/B,MAAM,IAAI,GAAG,MAAK;YAChB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;AAEtC,YAAA,IAAI,IAAI,EAAE;gBACR,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;AAE3C,gBAAA,IAAI,MAAM;oBAAE,OAAO,CAAC,MAAa,CAAC,CAAA;gBAElC,OAAM;AACP,aAAA;AAED,YAAA,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK,CAAA;AAE3B,YAAA,MAAM,WAAW,GAAG,CAAC,CAAI,KAAI;AAC3B,gBAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACjB,gBAAA,IAAI,EAAE,CAAA;AACR,aAAC,CAAA;YAED,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;AAClC,SAAC,CAAA;;AAGD,QAAA,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AACpC,KAAC,CAAC,CAAA;AACJ;;;;"}