Я пытаюсь реализовать функцию для упаковки запросов. Суть её работы заключается в сборе запросов в пачку по 25 шт и отправки с интервалом в 50мс. После выполнения, ответ должен вернуться в функцию, которая отправила запрос.
Я новичок в javascript, было бы полезно слышать критику от продвинутых разработчиков.
// Пример вызова функции
await vk("get.user", { user_id: 1 });
При вызове функции, она оборачивается в промис и объект с параметрами, resolve и reject помещаются в массив.
let queue = [];
function vk(method, data = {}) {
return new Promise((resolve, reject) => {
const query = `API.${method}(${JSON.stringify(data)})`;
queue.push({ resolve, reject, query });
});
};
Вторая функция каждые 50мс извлекает из массива первые 25 вызовов, упаковывает и делает запрос. После, ответа пробегается в массиве и вызывается resolve() вызвавшей функции с результатом запроса.
setTimeout(async function execute() {
const queuePart = queue.splice(0, 25);
if (queuePart.length !== 0) {
const code = `return [${queuePart.reduce((chunk, { query }) => `${chunk}${query},`, "")}];`;
const response = await request(code);
for (let i = 0, len = response.length; i < len; i++) {
const { resolve } = queuePart[i];
resolve(response[i][0]);
};
};
setTimeout(execute, 50);
}, 50);