Skip to content

AsyncResource

[<Interface>]
type AsyncResource =
    static member Create<'Func, 'Result, 'This> (bind: 'Func -> 'Func, runInAsyncScope: Func<(obj array -> 'Result),'This option,obj array,'Result>, emitDestroy: unit -> AsyncResource, asyncId: unit -> float, triggerAsyncId: unit -> float) : AsyncResource
    abstract member asyncId () : float
    static member bind<'Func, 'ThisArg> (fn: 'Func, ?type: string, ?thisArg: 'ThisArg) : 'Func
    abstract member bind<'Func> (fn: 'Func) : 'Func
    abstract member emitDestroy () : AsyncResource
    abstract member runInAsyncScope<'This, 'Result> (fn: obj array -> 'Result, thisArg: 'This option, args: obj array) : 'Result
    abstract member triggerAsyncId () : float
AssemblyXantham.Fable.Node
Attributes[<Interface>]

The class AsyncResource is designed to be extended by the embedder's async resources. Using this, users can easily trigger the lifetime events of their own resources.

The init hook will trigger when an AsyncResource is instantiated.

The following is an overview of the AsyncResource API.

import { AsyncResource, executionAsyncId } from 'node:async_hooks';

// AsyncResource() is meant to be extended. Instantiating a
// new AsyncResource() also triggers init. If triggerAsyncId is omitted then
// async_hook.executionAsyncId() is used.
const asyncResource = new AsyncResource(
type, { triggerAsyncId: executionAsyncId(), requireManualDestroy: false },
);

// Run a function in the execution context of the resource. This will
// * establish the context of the resource
// * trigger the AsyncHooks before callbacks
// * call the provided function `fn` with the supplied arguments
// * trigger the AsyncHooks after callbacks
// * restore the original execution context
asyncResource.runInAsyncScope(fn, thisArg, ...args);

// Call AsyncHooks destroy callbacks.
asyncResource.emitDestroy();

// Return the unique ID assigned to the AsyncResource instance.
asyncResource.asyncId();

// Return the trigger ID for the AsyncResource instance.
asyncResource.triggerAsyncId();

Methods

static member Create<'Func, 'Result, 'This> (bind: 'Func -> 'Func, runInAsyncScope: Func<(obj array -> 'Result),'This option,obj array,'Result>, emitDestroy: unit -> AsyncResource, asyncId: unit -> float, triggerAsyncId: unit -> float) : AsyncResource
abstract member asyncId () : float

Returns. The unique asyncId assigned to the resource.

static member bind<'Func, 'ThisArg> (fn: 'Func, ?type: string, ?thisArg: 'ThisArg) : 'Func

Binds the given function to the current execution context.

@since v14.8.0, v12.19.0

Parameter
fnThe function to bind to the current execution context.
typeAn optional name to associate with the underlying AsyncResource.
abstract member bind<'Func> (fn: 'Func) : 'Func

Binds the given function to execute to this AsyncResource's scope.

@since v14.8.0, v12.19.0

Parameter
fnThe function to bind to the current AsyncResource.
abstract member emitDestroy () : AsyncResource

Call all destroy hooks. This should only ever be called once. An error will be thrown if it is called more than once. This must be manually called. If the resource is left to be collected by the GC then the destroy hooks will never be called.

Returns. A reference to asyncResource.

abstract member runInAsyncScope<'This, 'Result> (fn: obj array -> 'Result, thisArg: 'This option, args: obj array) : 'Result

Call the provided function with the provided arguments in the execution context of the async resource. This will establish the context, trigger the AsyncHooks before callbacks, call the function, trigger the AsyncHooks after callbacks, and then restore the original execution context.

@since v9.6.0

Parameter
fnThe function to call in the execution context of this async resource.
thisArgThe receiver to be used for the function call.
argsOptional arguments to pass to the function.
abstract member triggerAsyncId () : float

Returns. The same triggerAsyncId that is passed to the AsyncResource constructor.