rpgeeganage/async-ray

View on GitHub
lib/methods/a_find.ts

Summary

Maintainability
A
0 mins
Test Coverage
/** returns boolean */
export type CallBackFind<T> = (
  value: T,
  index?: number,
  collection?: T[]
) => Promise<boolean>;

/**
 * Async Find function
 *
 * @export
 * @template T
 * @param {T[]} elements
 * @param {CallBackFind<T>} cb
 * @returns {Promise<T | undefined>}
 */
export async function aFind<T>(
  elements: T[],
  cb: CallBackFind<T>
): Promise<T | undefined> {
  for (const [index, element] of elements.entries()) {
    if (await cb(element, index, elements)) {
      return element;
    }
  }

  return undefined;
}