batchloader
Version:
BatchLoader is a utility for data fetching layer to reduce requests via batching written in TypeScript. Inspired by Facebook's DataLoader
26 lines • 1 kB
JavaScript
import { BatchLoader } from './batchloader';
export const proxyLoaderWithCache = (cache, loader, keyToUniqueId, batchDelay, batchSize) => new BatchLoader(async (keys) => {
const values = await cache.mget(keys);
const len = values.length;
const missingKeys = [];
const missingIndexes = [];
for (let i = 0; i < len; i += 1) {
if (values[i] === undefined) {
missingKeys.push(keys[i]);
missingIndexes.push(i);
}
}
if (missingKeys.length) {
const missingValues = await loader.loadMany(missingKeys);
const mlen = missingValues.length;
const missingKeyValues = [];
for (let i = 0; i < mlen; i += 1) {
const value = missingValues[i];
values[missingIndexes[i]] = value;
missingKeyValues.push([missingKeys[i], value]);
}
cache.mset(missingKeyValues);
}
return values;
}, keyToUniqueId, batchDelay, batchSize);
//# sourceMappingURL=cacheproxyloader.js.map