UNPKG

@ixily/activ

Version:

Alpha Capture Trade Idea Verification. Blockchain ownership proven trade ideas and strategies.

44 lines (37 loc) 1 kB
import { rest } from '../../' type Task<T> = () => Promise<T> const state = { taskChunks: new Map<string, number>(), runningPool: new Map<string, number>(), } const defineTaskChunks = (taskId: string, taskChunks: number) => { state.taskChunks.set(taskId, taskChunks) state.runningPool.set(taskId, 0) } const run = async <T>(taskId: string, task: Task<T>): Promise<T> => { const taskChunks = state.taskChunks.get(taskId) if (!taskChunks) { throw new Error(`Task chunks not defined for task ${taskId}`) } if (state.runningPool.get(taskId)! >= taskChunks) { while (state.runningPool.get(taskId)! >= taskChunks) { await rest(10) } return run(taskId, task) } else { let result state.runningPool.set(taskId, state.runningPool.get(taskId)! + 1) try { result = await task() } catch (err) { throw err } finally { state.runningPool.set(taskId, state.runningPool.get(taskId)! - 1) } return result } } export const ParallelChunksModule = { defineTaskChunks, run, }