aboutsummaryrefslogtreecommitdiff
path: root/node_modules/continuable-cache/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/continuable-cache/index.js')
-rw-r--r--node_modules/continuable-cache/index.js29
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
+ }
+}