AsyncContext
Napi::AsyncWorker类可能并非适用于所有场景。当使用其他任何异步机制时,引入新的Napi::AsyncContext类是必要的,以确保运行时能正确跟踪异步操作。Napi::AsyncContext类可传递给Napi::Function::MakeCallback()方法,以正确恢复正确的异步执行上下文。
方法
构造函数
创建一个新的Napi::AsyncContext。
cpp
explicit Napi::AsyncContext::AsyncContext(napi_env env, const char* resource_name);
[in] env:用于创建Napi::AsyncContext的环境。[in] resource_name:以空字符结尾的字符串,表示为async_hooksAPI 所暴露的诊断信息提供的资源类型标识符。
构造函数
创建一个新的Napi::AsyncContext。
cpp
explicit Napi::AsyncContext::AsyncContext(napi_env env, const char* resource_name, const Napi::Object& resource);
[in] env:用于创建Napi::AsyncContext的环境。[in] resource_name:以空字符结尾的字符串,表示为async_hooksAPI 所暴露的诊断信息提供的资源类型标识符。[in] resource:与异步操作相关联的对象,将传递给可能的async_hooks。
析构函数
销毁Napi::AsyncContext实例。
cpp
virtual Napi::AsyncContext::~AsyncContext();
Env
获取创建该异步上下文时的环境。
cpp
Napi::Env Env() const;
返回创建该异步上下文的Napi::Env环境。
运算符
cpp
Napi::AsyncContext::operator napi_async_context() const;
返回由Napi::AsyncContext对象包装的 Node-API 的napi_async_context。这可用于混合使用 C Node-API 和 node-addon-api。
示例
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>();
// 创建一个新的异步上下文实例。
Napi::AsyncContext context(info.Env(), "async_context_test", resource);
// 使用异步上下文实例调用回调函数。
callback.MakeCallback(Napi::Object::New(info.Env()),
std::initializer_list<napi_value>{}, context);
// 异步上下文实例在此处会自动销毁,因为它像`Napi::HandleScope`一样具有块作用域。
}