edge/pkg/app/promise_proxy.go

53 lines
987 B
Go
Raw Permalink Normal View History

2023-02-09 12:16:36 +01:00
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
}
func NewPromiseProxyFrom(rt *goja.Runtime) *PromiseProxy {
promise, resolve, reject := rt.NewPromise()
return NewPromiseProxy(promise, resolve, reject)
}
func IsPromise(v goja.Value) (*goja.Promise, bool) {
promise, ok := v.Export().(*goja.Promise)
return promise, ok
}