git ssb

1+

Matt McKegg / mutant



Tree: e9d4ab45391a98cd08092fe447f7cd7c3732779b

Files: e9d4ab45391a98cd08092fe447f7cd7c3732779b / watch-all.js

1068 bytesRaw
1var resolve = require('./resolve')
2var isObservable = require('./is-observable')
3var onceIdle = require('./once-idle')
4
5module.exports = watchAll
6
7function watchAll (observables, listener, opts) {
8 if (!Array.isArray(observables)) {
9 observables = [ observables ]
10 }
11
12 var broadcasting = false
13 var releases = observables.map(bind, broadcast)
14
15 broadcast()
16
17 return function () {
18 releases.forEach(tryInvoke)
19 releases.length = 0
20 }
21
22 function broadcast () {
23 if (opts && opts.idle) {
24 if (!broadcasting) {
25 broadcasting = true
26 onceIdle(broadcastNow)
27 }
28 } else if (opts && opts.nextTick) {
29 if (!broadcasting) {
30 broadcasting = true
31 setImmediate(broadcastNow)
32 }
33 } else {
34 broadcastNow()
35 }
36 }
37
38 function broadcastNow () {
39 broadcasting = false
40 listener.apply(this, observables.map(resolve))
41 }
42}
43
44function bind (value) {
45 if (isObservable(value)) {
46 return value(this)
47 }
48}
49
50function tryInvoke (value) {
51 if (typeof value === 'function') {
52 return value()
53 }
54}
55

Built with git-ssb-web