go-promises/promisify.go

29 lines
665 B
Go
Raw Normal View History

2024-12-27 15:19:49 -06:00
package promises
import "syscall/js"
type JSWrapper func(this js.Value, args []js.Value) (any, error)
func PromisifyGoFunc(caller JSWrapper) js.Func {
return js.FuncOf(func(this js.Value, args []js.Value) any {
return NewGlobal("Promise", js.FuncOf(func(_ js.Value, promArgs []js.Value) any {
resolve := promArgs[0]
reject := promArgs[1]
go func() {
val, err := caller(this, args)
if err != nil {
reject.Invoke(GoErrorToJSError(err))
} else {
jsVal, jsErr := ValueOf(val)
if jsErr != nil {
reject.Invoke(GoErrorToJSError(jsErr))
} else {
resolve.Invoke(jsVal)
}
}
}()
return nil
}))
})
}