28 lines
665 B
Go
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
|
|
}))
|
|
})
|
|
}
|