Files
napi-go/promise.go
Matheus Sampaio Queiroga 652638e8ee feat: Add AsyncWork and Promise support
Introduces `napi.CreateAyncWorker` for background tasks and
`napi.CreatePromise` for handling asynchronous operations via deferred
objects.

Refactors the module export registration to use `go:linkname`,
replacing the previous `entry.Register` function. Adds new examples
demonstrating these features and the updated export style.
2025-04-27 19:25:52 -03:00

41 lines
1.1 KiB
Go

package napi
import "sirherobrine23.com.br/Sirherobrine23/napi-go/internal/napi"
type Promise struct {
value
promiseDeferred napi.Deferred
}
// If [ValueType] is [*Promise] return else panic
func ToPromise(o ValueType) *Promise {
switch v := o.(type) {
case *Promise:
return v
case *Value:
if len(v.extra) == 1 {
promiseDeferred, ok := v.extra[0].(napi.Deferred)
if ok {
return &Promise{v, promiseDeferred}
}
}
}
panic("cannot convert ValueType to Promise, required create by CreatePromise")
}
func CreatePromise(env EnvType) (*Promise, error) {
promiseValue, promiseDeferred, err := napi.CreatePromise(env.NapiValue())
if err := err.ToError(); err != nil {
return nil, err
}
return ToPromise(N_APIValue(env, promiseValue, promiseDeferred)), nil
}
func (promise *Promise) Reject(value ValueType) error {
return napi.RejectDeferred(promise.NapiEnv(), promise.promiseDeferred, value.NapiValue()).ToError()
}
func (promise *Promise) Resolve(value ValueType) error {
return napi.ResolveDeferred(promise.NapiEnv(), promise.promiseDeferred, value.NapiValue()).ToError()
}