Middle+
ID бойынша деректер сұраулары үшін batchFetch функциясының орамасы ретінде smartFetch функциясын жүзеге асырыңыз. Бұл функция уақыт терезесі (timeout) ішінде шақыруларды жинақтап, оларды бір батч сұрау ретінде жіберуі керек. Келесі терезеге күту сұрауды жібергеннен кейін дереу басталады. ID бірегей, fetch әрқашан сәтті. Бір терезеде қайталанатын ID келген жағдайда дұрыс өңдеу қажет.
sobes.tech AI
Ҷавоб аз AI
javascript function smartFetch(batchFetch, timeout) { let queue = new Map(); // id -> [resolve, reject] let timer = null;
function flush() { const ids = Array.from(queue.keys()); const resolvers = Array.from(queue.values()); queue = new Map(); timer = null;
batchFetch(ids).then(results => {
// results - массив данных в том же порядке, что и ids
results.forEach((result, index) => {
resolvers[index].resolve(result);
});
});
}
return function(id) { return new Promise((resolve, reject) => { if (!queue.has(id)) { queue.set(id, {resolve, reject}); } else { // Ако id вече съществува, добавете още едно resolve, за да получат всички отговор const old = queue.get(id); // Преобразувайте в масив, ако е необходимо if (Array.isArray(old)) { old.push({resolve, reject}); queue.set(id, old); } else { queue.set(id, [old, {resolve, reject}]); } }
if (!timer) {
timer = setTimeout(flush, timeout);
}
});
}; }