diff --git a/ui/src/lib/entity.ts b/ui/src/lib/entity.ts index 480f7eb..19b4ada 100644 --- a/ui/src/lib/entity.ts +++ b/ui/src/lib/entity.ts @@ -57,13 +57,23 @@ export function query(query: () => string) { } const queryOnceLRU = new LRU(128); +const inFlightRequests: { [key: string]: Promise } = {}; export async function queryOnce(query: string): Promise { const cacheResult = queryOnceLRU.get(query); if (!cacheResult) { - console.debug(`Querying: ${query}`); - const response = await fetch(`/api/obj?query=${query}`); - return listingAsOrdered(await response.json()); + const url = `/api/obj?query=${query}`; + let response; + if (!inFlightRequests[url]) { + console.debug(`Querying: ${query}`); + inFlightRequests[url] = new Promise(async (resolve, reject) => { + const response = await fetch(url); + resolve(listingAsOrdered(await response.json())); + }); + } else { + console.debug(`Chaining request for ${query}...`); + } + return await inFlightRequests[url]; } else { console.debug(`Returning cached: ${query}`); return cacheResult;