🎉 Commit of go-promises

This commit is contained in:
Dan Jones 2024-12-27 15:19:49 -06:00
commit 5d84d26c3a
Signed by: dan
GPG key ID: 5B3B0F7217473A29
13 changed files with 238 additions and 0 deletions

28
promisify.go Normal file
View file

@ -0,0 +1,28 @@
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
}))
})
}