Middle+
Realizējiet funkciju smartFetch, kas ir pārklājums pār funkciju batchFetch, lai veiktu datu pieprasījumus no backend pēc ID. Funkcija jākrāj izsaukumi laika loga (timeout) laikā un jānosūta tie vienā partijā. Nākamā loga gaidīšana sākas nekavējoties pēc pieprasījuma nosūtīšanas. ID ir unikāli, fetch vienmēr ir veiksmīgs. Jāparet pareizi gadījums, kad vienā logā nāk dublēti ID.
sobes.tech AI
Atbilde no 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 - datu masīvs tajā pašā secībā kā 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 { // Ja id jau ir, pievieno vēl vienu resolve, lai visi zvani saņemtu atbildi const old = queue.get(id); // Pārvērst par masīvu, ja nepieciešams 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);
}
});
}; }