liudong
2023-05-29 340f156319b863525e50e900c58e59b86ecb3d5e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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
    }
}