Middle+
ID ile backend'den veri sorguları için batchFetch fonksiyonunun bir sarmalayıcısı olan smartFetch fonksiyonunu uygulayın. Fonksiyon, belirli bir zaman penceresi (timeout) boyunca çağrıları toplayacak ve bunları tek bir toplu istekte gönderecek. Bir sonraki pencere beklemesi, isteğin gönderilmesinin hemen ardından başlar. ID'ler benzersizdir, fetch her zaman başarılıdır. Aynı pencerede tekrar eden ID'lerin geldiği durumu doğru şekilde işlemeniz gerekir.
sobes.tech yapay zeka
AI'dan gelen yanıt
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 - aynı sıradaki verilerin dizisi, ids ile aynı sırada
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 { // Eğer id zaten varsa, başka bir resolve ekle ki tüm çağrılar cevap alsın const old = queue.get(id); // Gerekirse diziye dönüştür 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);
}
});
}; }