42 lines
710 B
Go
42 lines
710 B
Go
|
package app
|
||
|
|
||
|
import (
|
||
|
"sync"
|
||
|
|
||
|
"github.com/dop251/goja"
|
||
|
)
|
||
|
|
||
|
type PromiseProxy struct {
|
||
|
*goja.Promise
|
||
|
wg sync.WaitGroup
|
||
|
resolve func(result interface{})
|
||
|
reject func(reason interface{})
|
||
|
}
|
||
|
|
||
|
func (p *PromiseProxy) Resolve(result interface{}) {
|
||
|
defer p.wg.Done()
|
||
|
p.resolve(result)
|
||
|
}
|
||
|
|
||
|
func (p *PromiseProxy) Reject(reason interface{}) {
|
||
|
defer p.wg.Done()
|
||
|
p.resolve(reason)
|
||
|
}
|
||
|
|
||
|
func (p *PromiseProxy) Wait() {
|
||
|
p.wg.Wait()
|
||
|
}
|
||
|
|
||
|
func NewPromiseProxy(promise *goja.Promise, resolve func(result interface{}), reject func(reason interface{})) *PromiseProxy {
|
||
|
proxy := &PromiseProxy{
|
||
|
Promise: promise,
|
||
|
wg: sync.WaitGroup{},
|
||
|
resolve: resolve,
|
||
|
reject: reject,
|
||
|
}
|
||
|
|
||
|
proxy.wg.Add(1)
|
||
|
|
||
|
return proxy
|
||
|
}
|