异步资源
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:绑定到当前执行上下文的函数。typestring:与底层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 许可协议。转载请注明来自 山水庄园!
评论






