blob: 59802bb69839d3b031a9e3a4ce4d0905e25c0c81 [file] [log] [blame]
Leo Repp58b9f112021-11-22 11:57:47 +01001var Nil = {}
2
3module.exports = cache
4
5// cache := (Continuable<T>) => Continuable<T>
6function cache(source) {
7 var _err = Nil
8 var _value = Nil
9 var _result = null
10 var listeners = null
11
12 return function continuable(callback) {
13 if (_err !== Nil || _value !== Nil) {
14 callback(_err, _value)
15 } else if (listeners) {
16 listeners.push(callback)
17 } else {
18 listeners = [callback]
19 _result = source(function (err, value) {
20 _err = err
21 _value = value
22
23 listeners.forEach(function (l) { l(err, value) })
24 })
25 }
26
27 return _result
28 }
29}