diff options
Diffstat (limited to 'node_modules/continuable-cache/index.js')
-rw-r--r-- | node_modules/continuable-cache/index.js | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/node_modules/continuable-cache/index.js b/node_modules/continuable-cache/index.js new file mode 100644 index 0000000..59802bb --- /dev/null +++ b/node_modules/continuable-cache/index.js @@ -0,0 +1,29 @@ +var Nil = {} + +module.exports = cache + +// cache := (Continuable<T>) => Continuable<T> +function cache(source) { + var _err = Nil + var _value = Nil + var _result = null + var listeners = null + + return function continuable(callback) { + if (_err !== Nil || _value !== Nil) { + callback(_err, _value) + } else if (listeners) { + listeners.push(callback) + } else { + listeners = [callback] + _result = source(function (err, value) { + _err = err + _value = value + + listeners.forEach(function (l) { l(err, value) }) + }) + } + + return _result + } +} |