Skip to content

node:async_hooks

How Elide supports Node's async_hooks: AsyncLocalStorage, AsyncResource and createHook, and where AsyncLocalStorage context does not propagate.

On this page

node:async_hooks provides AsyncLocalStorage, AsyncResource, and createHook from Node’s async_hooks.

Example

js
import { AsyncLocalStorage } from "node:async_hooks";

const storage = new AsyncLocalStorage();
storage.run("request", async () => {
  await null;
  console.log(storage.getStore()); // request
  queueMicrotask(() => console.log(storage.getStore())); // undefined
});
utf-8 · js · Lines: 8

Differences from Node

  • AsyncLocalStorage context is lost in queueMicrotask callbacks and node:fs callbacks.
  • createHook callbacks (init, before, after, destroy) fire for timers, immediates, and Promise continuations.

Reference

Status: Partial · 36 of 45 suite tests pass (80.0%) · since 1.1.0

Exports

ExportKindStatusNotes
async_hooksmodulePartialhooks fire for timers/immediates/promises but not yet for TCP/HTTP/TLS native resources
createHook()functionFullCreates a new AsyncHook instance
executionAsyncId()functionFullReturns the asyncId of the current execution context
triggerAsyncId()functionFullReturns the ID of the resource responsible for calling the callback that is currently being executed
AsyncLocalStoragepropertyFullThe AsyncLocalStorage class
AsyncResourcepropertyFullThe AsyncResource class

Tests: node-api node:async-hooks: 36 pass, 8 fail, 1 error, 3 skipped. Failing: test-async-hooks-destroy-on-gc.js, test-async-hooks-enable-recursive.js, test-async-hooks-fatal-error.js, test-async-hooks-http-parser-destroy.js, test-async-hooks-top-level-clearimmediate.js, test-async-local-storage-http-agent.js, test-async-local-storage-http-multiclients.js, test-async-local-storage-http-parser-leak.js, and 1 more.

Was this page helpful?