The Napi::AsyncWorker class may not be appropriate for every
scenario. When using any other async mechanism, introducing a new class
Napi::AsyncContext
is necessary to ensure an async operation is properly
tracked by the runtime. The Napi::AsyncContext
class can be passed to
Napi::Function::MakeCallback() method to properly restore the
correct async execution context.
Creates a new Napi::AsyncContext
.
explicit Napi::AsyncContext::AsyncContext(napi_env env, const char* resource_name);
[in] env
: The environment in which to create theNapi::AsyncContext
.[in] resource_name
: Null-terminated strings that represents the identifier for the kind of resource that is being provided for diagnostic information exposed by theasync_hooks
API.
Creates a new Napi::AsyncContext
.
explicit Napi::AsyncContext::AsyncContext(napi_env env, const char* resource_name, const Napi::Object& resource);
[in] env
: The environment in which to create theNapi::AsyncContext
.[in] resource_name
: Null-terminated strings that represents the identifier for the kind of resource that is being provided for diagnostic information exposed by theasync_hooks
API.[in] resource
: Object associated with the asynchronous operation that will be passed to possibleasync_hooks
.
The Napi::AsyncContext
to be destroyed.
virtual Napi::AsyncContext::~AsyncContext();
Requests the environment in which the async context has been initially created.
Napi::Env Env() const;
Returns the Napi::Env
environment in which the async context has been created.
Napi::AsyncContext::operator napi_async_context() const;
Returns the Node-API napi_async_context
wrapped by the Napi::AsyncContext
object. This can be used to mix usage of the C Node-API and node-addon-api.
#include "napi.h"
void MakeCallbackWithAsyncContext(const Napi::CallbackInfo& info) {
Napi::Function callback = info[0].As<Napi::Function>();
Napi::Object resource = info[1].As<Napi::Object>();
// Create a new async context instance.
Napi::AsyncContext context(info.Env(), "async_context_test", resource);
// Invoke the callback with the async context instance.
callback.MakeCallback(Napi::Object::New(info.Env()),
std::initializer_list<napi_value>{}, context);
// The async context instance is automatically destroyed here because it's
// block-scope like `Napi::HandleScope`.
}