我正在尝试创建通用函数,以使并行运行的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);
};