import asyncForEachStrict from './forEach_strict.js'; function asyncFindIndex( arr: T[], fn: (cur: T, idx: number, arr: T[]) => Promise, ): Promise<-1>; function asyncFindIndex( arr: T[], fn: (cur: T, idx: number, arr: T[]) => Promise, ): Promise; function asyncFindIndex( arr: T[], fn: (cur: T, idx: number, arr: T[]) => Promise, ): Promise { let resolved: boolean; return new Promise((resolve, reject) => { asyncForEachStrict( arr, (cur, idx, arr2) => new Promise((resolve2, reject2) => { if (resolved) { return; } fn(cur, idx, arr2) .then((result) => { if (result) { resolve(idx); resolved = true; } resolve2(); }) .catch(reject2); }), ) .then(() => { resolve(-1); resolved = true; }) .catch((error) => { reject(error); resolved = true; }); }); } export default asyncFindIndex;