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

}; }