go-promises/promisify.go
2024-12-27 15:29:47 -06:00

28 lines
665 B
Go

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
}))
})
}