Middle+
Backend-dən məlumat sorğuları üçün batchFetch funksiyasının üzərində olan smartFetch funksiyasını həyata keçirin. Funksiya, vaxt pəncərəsi (timeout) ərzində çağırışları yığmalı və onları bir partiya sorğusu ilə göndərməlidir. Növbəti pəncərənin gözlənilməsi, sorğu göndərildikdən dərhal sonra başlayır. ID-lər unikal, fetch həmişə uğurludur. Eyni pəncərədə təkrarlanan ID-lərin gəlməsi halını düzgün işləmək lazımdır.
sobes.tech Süni İntellekt
AI-dan cavab
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 { // Əgər id artıq mövcuddursa, başqa bir resolve əlavə et ki, bütün çağırışlar cavab alsın const old = queue.get(id); // Array-ə çevirmək lazımdırsa 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);
}
});
}; }