batchloader
Version:
BatchLoader is a utility for data fetching layer to reduce requests via batching written in TypeScript. Inspired by Facebook's DataLoader
28 lines • 1.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const batchloader_1 = require("./batchloader");
exports.proxyLoaderWithCache = (cache, loader, keyToUniqueId, batchDelay, batchSize) => new batchloader_1.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