[ui] add (very) simple requests debouncing...
parent
19aaead3db
commit
893ed2307b
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue