batchloader
Version:
BatchLoader is a utility for data fetching layer to reduce requests via batching written in TypeScript. Inspired by Facebook's DataLoader
40 lines • 1.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var batchloader_1 = require("./batchloader");
exports.proxyLoaderWithCache = function (cache, loader, keyToUniqueId, batchDelay, batchSize) {
return new batchloader_1.BatchLoader(function (keys) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var values, len, missingKeys, missingIndexes, i, missingValues, mlen, missingKeyValues, i, value;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4, cache.mget(keys)];
case 1:
values = _a.sent();
len = values.length;
missingKeys = [];
missingIndexes = [];
for (i = 0; i < len; i += 1) {
if (values[i] === undefined) {
missingKeys.push(keys[i]);
missingIndexes.push(i);
}
}
if (!missingKeys.length) return [3, 3];
return [4, loader.loadMany(missingKeys)];
case 2:
missingValues = _a.sent();
mlen = missingValues.length;
missingKeyValues = [];
for (i = 0; i < mlen; i += 1) {
value = missingValues[i];
values[missingIndexes[i]] = value;
missingKeyValues.push([missingKeys[i], value]);
}
cache.mset(missingKeyValues);
_a.label = 3;
case 3: return [2, values];
}
});
}); }, keyToUniqueId, batchDelay, batchSize);
};
//# sourceMappingURL=cacheproxyloader.js.map