UNPKG

@iam4x/bsc-scan

Version:

An efficient BNB and token balance scanner

34 lines (31 loc) 1.23 kB
/** * Split an array per `size` items. * * @param {T[]} input * @param {number} size * @return {T[][]} An array of arrays of the specified type. * @template T */ export const chunk = <T>(input: T[], size: number): T[][] => { return input.reduce<T[][]>((array, item, index) => { return index % size === 0 ? [...array, [item]] : [...array.slice(0, -1), [...array.slice(-1)[0], item]]; }, []); }; /** * Batch the function calls to `handler` per `size` items. * * @param {(addresses: string[] | number[]) => Promise<BigNumber[]>} handler A function that takes a batch of addresses and returns the balance for the addresses. * @param {number} size The size of the batches. * @param {string[] | number[]} addresses The addresses to batch. * @return {Promise<BigNumber[]>} A promise with the balances. */ export const batch = async <T = bigint>( handler: (addresses: string[] | number[]) => Promise<T[]>, size: number, addresses: string[] | number[] ): Promise<T[]> => { const chunks = chunk(addresses as any, size); return chunks.reduce<Promise<T[]>>(async (current, next) => { return Promise.resolve([...(await current), ...(await handler(next as string[]))]); }, Promise.resolve<T[]>([])); };