typescript:异步函数作为另一个函数的参数执行,而不是挂起

时间:2019-06-03 14:40:11

标签: arrays typescript parallel-processing promise

我正在尝试创建通用函数,以使并行运行的Promise的数量稳定。主要主题是控制google API调用,以避免达到google定义的某些配额。

我正在创建一个值数组。 然后,我遍历此数组,并创建一个Promises数组。每个承诺都在调用一个以值作为参数的函数。 最后,我正在运行一个promise.all,用于X个未完成的Promise的每个块

不幸的是,当创建“待定” promise数组时,将执行作为参数传递的函数。结果,通过Promise.all控制并发执行是没有用的。

下面是代码。 Rgds

函数,以该函数为参数创建承诺数组

Dogs d

按块执行承诺数组的功能

d

要执行的功能示例

 const createArrayOfFunctionPromise = <T>(
  arrayVal: T[],
  functionToExecute: (...args: any[]) => any
): Array<Promise<T[]>> => {
  const resu: Array<Promise<T[]>> = [];
  arrayVal.forEach((val: T, index: number) => {
    resu.push(functionToExecute(val, index));
  });
  return resu;
};

要运行的测试程序-在循环3个元素的数组时应以2的方式执行功能dummyFunction 2(chunk = 2)

const executeArrayOfFunctionPromiseByChunk = async <T>(
  arrValue: T[],
  functionToExecute: (...args: any[]) => any,
  chunk?: number
): Promise<T[]> => {
  const arrP: Array<Promise<T[]>> = createArrayOfFunctionPromise<T>(
    arrValue,
    functionToExecute
  );
  let data: T[][] = [];
  if (chunk) {
    if (chunk > 0) {
      let tmpArr: Array<Promise<T[]>> = [];
      for (let i: number = 0; i < arrP.length; i += 1) {
        tmpArr.push(arrP[i]);
        if (i % chunk === 0 || i === arrP.length - 1) {
          const d = await Promise.all(tmpArr);
          data.push(d.flat(1));
          tmpArr = [];
        }
      }
    } else {
      return [];
    }
  } else {
    data = await Promise.all(arrP);
  }
  // console.log(data);
  return data.flat(1);
};

0 个答案:

没有答案