Sobes.tech
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);
  }
});

}; }