Middle+
Կատարեք smartFetch ֆունկցիան, որը հանդիսանում է batchFetch ֆունկցիայի պատյան՝ տվյալների հարցումների համար backend-ից ID-ով: Ֆունկցիան պետք է հավաքի կանչերը ժամանակային պատուհանի (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 - array of data in the same order as 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);
}
});
}; }