You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					77 lines
				
				2.3 KiB
			
		
		
			
		
	
	
					77 lines
				
				2.3 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								# 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();
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## 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::Function>();
							 | 
						||
| 
								 | 
							
								  Napi::Object resource = info[1].As<Napi::Object>();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // 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<napi_value>{}, context);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // The async context instance is automatically destroyed here because it's
							 | 
						||
| 
								 | 
							
								  // block-scope like `Napi::HandleScope`.
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								```
							 |