Files
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

45 lines
1.7 KiB
Go

package napi
// #include <stdlib.h>
// #include <node/node_api.h>
import "C"
import "unsafe"
type Deferred unsafe.Pointer
// This API creates a deferred object and a JavaScript promise.
func CreatePromise(env Env) (Value, Deferred, Status) {
var value Value
var deferred Deferred
status := Status(C.napi_create_promise(
C.napi_env(env),
(*C.napi_deferred)(unsafe.Pointer(&deferred)),
(*C.napi_value)(unsafe.Pointer(&value)),
))
return value, deferred, status
}
// This API resolves a JavaScript promise by way of the deferred object with which it is associated.
// Thus, it can only be used to resolve JavaScript promises for which the corresponding deferred object is available.
// This effectively means that the promise must have been created using napi_create_promise() and the deferred object returned from that call must have been retained in order to be passed to this API.
func ResolveDeferred(env Env, deferred Deferred, resolution Value) Status {
return Status(C.napi_resolve_deferred(
C.napi_env(env),
C.napi_deferred(deferred),
C.napi_value(resolution),
))
}
// This API rejects a JavaScript promise by way of the deferred object with which it is associated.
// Thus, it can only be used to reject JavaScript promises for which the corresponding deferred object is available.
// This effectively means that the promise must have been created using napi_create_promise() and the deferred object returned from that call must have been retained in order to be passed to this API.
func RejectDeferred(env Env, deferred Deferred, rejection Value) Status {
return Status(C.napi_reject_deferred(
C.napi_env(env),
C.napi_deferred(deferred),
C.napi_value(rejection),
))
}