javascript - Deno 有办法跟踪异步上下文吗?
问题描述
广义地说,在 NodeJS 中,每当代码运行时,程序都会创建“异步上下文”,通过事件循环或微任务队列创建稍后运行的回调。网络请求、setTimeout
回调、Promise 等。
在 NodeJs 的现代版本中,您拥有(仍处于试验阶段)async_hooks
模块来跟踪这些异步资源的生命周期。
以前的 NodeJS 版本现在已弃用-由polyfill 包process.addAsyncListener
保持活动状态。async-listener
Deno 是否有任何内置或第三方功能允许用户态代码跟踪这些异步上下文的创建?或者 Deno 的工作原理是否使这个概念变得无关紧要?
解决方案
我不认为这种功能目前或通过 3rd 方模块是公开可用的。
简要研究了async_hooks
提供的功能(可能会遗漏一些重要的东西,请纠正我),看起来init
并且promiseResolve
更像是 Deno 中有趣的功能(Deno 在其 API 中几乎不使用回调)。
Deno 进行特权操作的方式是向 Rust 端发送序列化的文本消息(主要是 JSON)和零拷贝缓冲区,并在 Rust 端调用带有响应消息的回调时从 Rust 端接收消息。如果我们可以通过向一些核心消息通道方法添加一个小的包装监听器来拦截其中的一些,那将会很有趣,例如Deno.core.dispatchByName
(几乎所有 Deno 特权操作,异步或同步都使用这个监听器。还有很多有趣的其他上可用的东西Deno.core
,请参阅core/core.js
源代码。handleAsyncMsgFromRust
尽管没有公开从 Rust 接收异步消息的方式)。
不幸Deno.core
的是,目前被冻结(实际上我是负责此更改的人)以避免覆盖(这可能会导致升级时的硬崩溃,因为Deno.core
主机关键但易失的内部 API)。可能您可以在 Deno 存储库中打开一个问题,询问其他人是否愿意实现某些接口以允许用户将消息捕获回调注入概念send
和recv
方法。(我目前无法投稿)
推荐阅读
- c# - 来自 DataTable 的 C# DataRow 未读取第一个值
- wpf - 在选定的 wpf 上禁用 TabItem 的边框和背景更改
- numpy - 在 Numpy 中模拟相机
- hash - 比特币挖矿难题的目的
- java - FluentWait 默认超时为零
- python-3.x - 2 x 2 Seaborn 中每个子图的不同标题
- processing - (已解决)如何在处理 3 中禁用关闭屏幕模式?
- python - 您能否详细说明一下 print 功能在这里实际上做了什么?
- java - 对齐和缩进数组元素 - Java
- python - 具有 min_max 年份计算的 Groupby 代码