Addon modules often need to leverage async helpers from libuv as part of their implementation. This allows them to schedule work to be executed asynchronously so that their methods can return in advance of the work being completed. This allows them to avoid blocking overall execution of the Node.js application.

    N-API provides an ABI-stable interface for these supporting functions which covers the most common asynchronous use cases.

    N-API defines the napi_async_work structure which is used to manage asynchronous workers. Instances are created/deleted with [napi_create_async_work][] and [napi_delete_async_work][].

    The execute and complete callbacks are functions that will be invoked when the executor is ready to execute and when it completes its task respectively.

    The execute function should avoid making any N-API calls that could result in the execution of JavaScript or interaction with JavaScript objects. Most often, any code that needs to make N-API calls should be made in complete callback instead. Avoid using the napi_env parameter in the execute callback as it will likely execute JavaScript.

    These functions implement the following interfaces:

    1. typedef void (*napi_async_execute_callback)(napi_env env,
    2. void* data);
    3. typedef void (*napi_async_complete_callback)(napi_env env,
    4. napi_status status,
    5. void* data);

    When these methods are invoked, the data parameter passed will be the addon-provided void* data that was passed into the napi_create_async_work call.

    Once created the async worker can be queued for execution using the [napi_queue_async_work][] function:

    1. napi_status napi_queue_async_work(napi_env env,
    2. napi_async_work work);

    [napi_cancel_async_work][] can be used if the work needs to be cancelled before the work has started execution.

    After calling [napi_cancel_async_work][], the complete callback will be invoked with a status value of napi_cancelled. The work should not be deleted before the complete callback invocation, even when it was cancelled.