1234567891011121314151617181920212223 |
- var has = require('./has');
- exports = function(fn) {
- var hashFn =
- arguments.length > 1 && arguments[1] !== undefined
- ? arguments[1]
- : JSON.stringify;
- var singleton = function() {
- var cache = singleton.cache;
- var address = hashFn.apply(this, arguments);
- if (has(cache, address)) {
- return cache[address];
- }
- var promise = fn.apply(this, arguments).finally(function() {
- delete cache[address];
- });
- cache[address] = promise;
- return promise;
- };
- singleton.cache = {};
- return singleton;
- };
- module.exports = exports;
|