All files / fuse-ui-shared asyncUtils.ts

41.67% Statements 10/24
12.5% Branches 1/8
25% Functions 1/4
41.18% Lines 7/17
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 561x                                                     1x                                       1x 1x 4x 4x     1x    
import { asArray, asIter, chunks, map } from './iterator';
export interface CallbackFunc<T> {
  (e: Error, r: T);
}
 
export type NodeAsyncCall<T> = {
  (callback: CallbackFunc<T>);
} | {
  (arg1: any, callback: CallbackFunc<T>);
} | {
  (arg1: any, arg2: any, callback: CallbackFunc<T>);
} | {
  (arg1: any, arg2: any, arg3: any, callback: CallbackFunc<T>);
} | {
  (arg1: any, arg2: any, arg3: any, arg4: any, callback: CallbackFunc<T>);
} | {
  (arg1: any, arg2: any, arg3: any, arg4: any, arg5: any, callback: CallbackFunc<T>);
} | {
  (arg1: any, arg2: any, arg3: any, arg4: any, arg5: any, arg6: any, callback: CallbackFunc<T>);
} | {
  (arg1: any, arg2: any, arg3: any, arg4: any, arg5: any, arg6: any, arg7: any, callback: CallbackFunc<T>);
} | {
  (arg1: any, arg2: any, arg3: any, arg4: any, arg5: any, arg6: any, arg7: any, arg8: any, callback: CallbackFunc<T>);
} | {
  (arg1: any, arg2: any, arg3: any, arg4: any, arg5: any, arg6: any, arg7: any, arg8: any, arg9: any, callback: CallbackFunc<T>);
};
 
export async function callbackToPromise<T>(func: NodeAsyncCall<T>, ...args: any[]): Promise<T> {
  return new Promise<any>((res, rej) => {
    const callback = (e: Error, ...results: any[]) => {
      if (e) {
        rej(e);
      } else {
        if (results.length === 0) {
          res();
        } else if (results.length === 1) {
          res(results[0]);
        } else {
          res(results);
        }
      }
    };
 
    func.apply(null, [...args, callback]);
  });
}
 
export async function whenAll<T, U>(tasks: U[], mapper: (x: U) => Promise<T>, Iparallelism: number = 10): Promise<T[]> {
  let results = [];
  for (const chunk of chunks(asIter(tasks), parallelism)) {
    results = [...results, ...(await Promise.all(asArray(map(chunk, mapper))))];
  }
 
  return results;
}