[ui] add (very) simple requests debouncing...

feat/vaults
Tomáš Mládek 2021-11-24 14:55:26 +01:00
parent 19aaead3db
commit 893ed2307b
1 changed files with 13 additions and 3 deletions

View File

@ -57,13 +57,23 @@ export function query(query: () => string) {
}
const queryOnceLRU = new LRU<string, OrderedListing>(128);
const inFlightRequests: { [key: string]: Promise<OrderedListing> } = {};
export async function queryOnce(query: string): Promise<OrderedListing> {
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;