pankod/refine

View on GitHub
packages/core/src/definitions/helpers/sequentialPromises/index.ts

Summary

Maintainability
A
0 mins
Test Coverage
type EachResolve<TResolve, Response> = (
  result: TResolve,
  index: number,
) => Response;
type EachReject<TReject, Response> = (
  error: TReject,
  index: number,
) => Response;

export const sequentialPromises = async <
  TResolve = unknown,
  TReject = unknown,
  TResolveResponse = unknown,
  TRejectResponse = unknown,
>(
  promises: (() => Promise<TResolve>)[],
  onEachResolve: EachResolve<TResolve, TResolveResponse>,
  onEachReject: EachReject<TReject, TRejectResponse>,
): Promise<(TResolveResponse | TRejectResponse)[]> => {
  const results = [];
  // @ts-expect-error Remove this when we enable `downLevelIterations`
  for (const [index, promise] of promises.entries()) {
    try {
      const result = await promise();

      results.push(onEachResolve(result, index));
    } catch (error) {
      results.push(onEachReject(error as TReject, index));
    }
  }
  return results;
};