Sobes.tech
Middle+

Rakenda smartFetch funktsiooni, mis on ümbris batchFetch funktsiooni jaoks andmete päringute tegemiseks backendist ID järgi. Funktsioon peab koguma kõned ajaraami (timeout) jooksul ja saatma need ühe partii päringuna. Järgmise akna ootamine algab kohe pärast päringu saatmist. ID-d on unikaalsed, fetch on alati edukas. Tuleb õigesti töödelda olukorda, kui ühe akna jooksul tulevad duplikaat-ID-d.

sobes.tech AI

Vastus AI-lt

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 - andmed massiiv samas järjekorras nagu 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 { // Kui id juba eksisteerib, lisa veel üks resolve, et kõik kutsed saaksid vastuse const old = queue.get(id); // Muuta massiiviks, kui vaja 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);
  }
});

}; }