Files
napi-go/promise.go
Matheus Sampaio Queiroga 813d742aff Add docs and remove threadsafe_function
- Add new function to ValueType conversion
- Add more docs to functions and minor changes
- rename entry to module
- don't expose Value and Env structs.

Signed-off-by: Matheus Sampaio Queiroga <srherobrine20@gmail.com>
2025-05-17 01:36:40 -03:00

51 lines
1.8 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")
}
// CreatePromise creates a new JavaScript Promise object in the given N-API environment.
// It returns a pointer to the created Promise and an error if the operation fails.
// The function internally calls napi.CreatePromise to obtain the promise value and deferred handle.
// If an error occurs during promise creation, it is converted and returned.
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
}
// Reject rejects the promise with the provided value.
// It calls napi.RejectDeferred to reject the underlying N-API deferred promise
// using the given ValueType. Returns an error if the rejection fails.
func (promise *Promise) Reject(value ValueType) error {
return napi.RejectDeferred(promise.NapiEnv(), promise.promiseDeferred, value.NapiValue()).ToError()
}
// Resolve fulfills the promise with the provided value.
// It resolves the underlying N-API deferred object using the given ValueType.
// Returns an error if the resolution fails.
func (promise *Promise) Resolve(value ValueType) error {
return napi.ResolveDeferred(promise.NapiEnv(), promise.promiseDeferred, value.NapiValue()).ToError()
}