异步资源
AsyncResource
AsyncResource
类旨在通过嵌入器的异步资源进行扩展。 使用它,用户可以轻松触发自己资源的生命周期事件。
init
钩子将在实例化 AsyncResource
时触发。
以下是 AsyncResource
API 的概述。
1 | import { AsyncResource, executionAsyncId } from 'node:async_hooks'; |
new AsyncResource(type[, options])
- type
string
: 异步事件类型 - options
Object
:- triggerAsyncId
number
: 创建此异步事件的执行上下文的 ID。 默认值:executionAsyncId()
。 - requireManualDestroy
boolean
: 是否需要手动调用 emitDestroy() 来启动垃圾回收机制,默认值: false
- triggerAsyncId
1 | class DBQuery extends AsyncResource { |
结合async_hooks 实现一个类似线程局部存储的例子(该例子可用asyncLocalStorage 更简洁的实现):
1 | const http = require('http'); |
静态方法
AsyncResource.bind(fn[, type[, thisArg]])
fn
:绑定到当前执行上下文的函数。type
string
:与底层AsyncResource
关联的可选名称。thisArg
:绑定到当前执行上下文的函数的this指向
将给定函数绑定到当前执行上下文。
返回的函数将具有 asyncResource
属性,该属性引用函数绑定到的 AsyncResource
。
实例方法
asyncResource.bind(fn[, thisArg])
fn
:绑定到当前AsyncResource
的函数。thisArg
:绑定到当前执行上下文的函数中this指向
将给定函数绑定到此AsyncResource
异步资源的执行上下文。
返回的函数将具有 asyncResource
属性,该属性引用函数绑定到的 AsyncResource
。
asyncResource.runInAsyncScope(fn[, thisArg, …args])
fn
:在此异步资源的执行上下文中调用的函数。thisArg
:fn 中this的指向...args
:传递给fn的参数
asyncResource.emitDestroy()
- 返回
asyncResource
的引用。
调用所有的 destroy
钩子。 这应该只被调用一次。 如果多次调用,则会报错。 此 必须 被手动调用。 如果资源留给 GC 收集,则永远不会调用 destroy
钩子。
asyncResource.asyncId()
- 返回分配给资源的唯一
asyncId
。
asyncResource.triggerAsyncId()
- 返回 传给
AsyncResource
构造函数的同一个triggerAsyncId
。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 山水庄园!
评论