| # AsyncContext | |
| The [Napi::AsyncWorker](async_worker.md) 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()](function.md) method to properly restore the | |
| correct async execution context. | |
| ## Methods | |
| ### Constructor | |
| Creates a new `Napi::AsyncContext`. | |
| ```cpp | |
| explicit Napi::AsyncContext::AsyncContext(napi_env env, const char* resource_name); | |
| ``` | |
| - `[in] env`: The environment in which to create the `Napi::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 the `async_hooks` API. | |
| ### Constructor | |
| Creates a new `Napi::AsyncContext`. | |
| ```cpp | |
| explicit Napi::AsyncContext::AsyncContext(napi_env env, const char* resource_name, const Napi::Object& resource); | |
| ``` | |
| - `[in] env`: The environment in which to create the `Napi::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 the `async_hooks` API. | |
| - `[in] resource`: Object associated with the asynchronous operation that | |
| will be passed to possible `async_hooks`. | |
| ### Destructor | |
| The `Napi::AsyncContext` to be destroyed. | |
| ```cpp | |
| virtual Napi::AsyncContext::~AsyncContext(); | |
| ``` | |
| ### Env | |
| Requests the environment in which the async context has been initially created. | |
| ```cpp | |
| Napi::Env Env() const; | |
| ``` | |
| Returns the `Napi::Env` environment in which the async context has been created. | |
| ## Operator | |
| ```cpp | |
| 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. | |
| ## Example | |
| ```cpp | |
| #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`. | |
| } | |
| ``` |