AsyncContext

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.

Methods

Constructor

Creates a new Napi::AsyncContext.

cpp explicit Napi::AsyncContext::AsyncContext(napi_env env, const char* resource_name);

Constructor

Creates a new Napi::AsyncContext.

cpp explicit Napi::AsyncContext::AsyncContext(napi_env env, const char* resource_name, const Napi::Object& resource);

Destructor

The Napi::AsyncContext to be destroyed.

cpp virtual Napi::AsyncContext::~AsyncContext();

Operator

cpp Napi::AsyncContext::operator napi_async_context() const;

Returns the N-API napi_async_context wrapped by the Napi::AsyncContext object. This can be used to mix usage of the C N-API and node-addon-api.

Example

```cpp

include "napi.h"

void MakeCallbackWithAsyncContext(const Napi::CallbackInfo& info) { Napi::Function callback = info[0].As(); Napi::Object resource = info[1].As();

// Creat 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{}, context);

// The async context instance is automatically destroyed here because it's // block-scope like Napi::HandleScope. } ```