[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 queryOnceLRU = new LRU<string, OrderedListing>(128);
|
||||||
|
const inFlightRequests: { [key: string]: Promise<OrderedListing> } = {};
|
||||||
|
|
||||||
export async function queryOnce(query: string): Promise<OrderedListing> {
|
export async function queryOnce(query: string): Promise<OrderedListing> {
|
||||||
const cacheResult = queryOnceLRU.get(query);
|
const cacheResult = queryOnceLRU.get(query);
|
||||||
if (!cacheResult) {
|
if (!cacheResult) {
|
||||||
console.debug(`Querying: ${query}`);
|
const url = `/api/obj?query=${query}`;
|
||||||
const response = await fetch(`/api/obj?query=${query}`);
|
let response;
|
||||||
return listingAsOrdered(await response.json());
|
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 {
|
} else {
|
||||||
console.debug(`Returning cached: ${query}`);
|
console.debug(`Returning cached: ${query}`);
|
||||||
return cacheResult;
|
return cacheResult;
|
||||||
|
|
Loading…
Reference in New Issue