github.com/0chain/gosdk@v1.17.11/wasmsdk/jsbridge/timer.go (about) 1 //go:build js && wasm 2 // +build js,wasm 3 4 package jsbridge 5 6 import ( 7 "sync" 8 "syscall/js" 9 "time" 10 ) 11 12 type Timer struct { 13 sync.Mutex 14 id js.Value 15 enabled bool 16 interval time.Duration 17 callback func() 18 } 19 20 func NewTimer(interval time.Duration, callback func()) *Timer { 21 return &Timer{ 22 interval: interval, 23 callback: callback, 24 } 25 } 26 27 func (t *Timer) Start() { 28 t.Lock() 29 defer t.Unlock() 30 31 if !t.enabled { 32 cb, _ := promise(t.updated) 33 t.id = js.Global().Call("setInterval", cb, t.interval.Milliseconds()) 34 t.enabled = true 35 } 36 } 37 38 func (t *Timer) Stop() { 39 if t.enabled { 40 js.Global().Call("clearInterval", t.id) 41 } 42 43 t.enabled = false 44 } 45 46 func (t *Timer) updated() { 47 if t.enabled { 48 t.callback() 49 } 50 }