Middle+
Implementieren Sie die Funktion smartFetch, die ein Wrapper um die Funktion batchFetch für Datenanfragen vom Backend nach ID ist. Die Funktion soll Aufrufe während eines Zeitfensters (Timeout) sammeln und sie in einer einzigen Batch-Anfrage senden. Das Warten auf das nächste Fenster beginnt sofort nach dem Versand der Anfrage. IDs sind eindeutig, fetch ist immer erfolgreich. Es ist notwendig, den Fall korrekt zu behandeln, wenn innerhalb eines Fensters doppelte IDs eintreffen.
sobes.tech KI
Antwort von 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 von Daten in der gleichen Reihenfolge wie 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 { // Wenn die id bereits vorhanden ist, füge einen weiteren resolve hinzu, damit alle Antworten erhalten const old = queue.get(id); // In ein Array umwandeln, falls nötig 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);
}
});
}; }