首页 存档 技术 查看内容

Node.js:10个最有用和有趣的新功能 2.捕获EventEmitter上的侦听器的名称 3. 大修 Buf ...

2018-3-30 13:00 |来自: 互联网 323 0

摘要: 1. DevTools Inspector 集成 去年,Chromium 团队找到 Node 核心团队,问他们是否对,重新使用和 Blink **的 DevTools debugger 来和 Node.js 交互的这种方式,感兴趣。尽管Node.js debugger 非常的实用, 这些年 ...

1. DevTools Inspector 集成

去年,Chromium 团队找到 Node 核心团队,问他们是否对,重新使用和 Blink **的 DevTools debugger 来和 Node.js 交互的这种方式,感兴趣。尽管Node.js debugger 非常的实用, 这些年它也没有被很好的关注,现代浏览器中的 Javascript debuggers 已经比 Node 自己能够提供的先进很多了。

在 Node.js 6.3.0 中,Google 的 v8_inspector 协议来自 Blink,并随 Node 提供。这个功能仍然被 Node 核心团队视为试验性的,这意味着,它还没有被全面的记录,并且可能在未来的版本中被移除,不必经过淘汰周期。但是呢,鉴于这个工具的普及和强大,上面的情况也并不可能发生。最可能的结果是,旧的 debugger 最终被新功能完全取缔。

当 Node.js 以--inspect命令后参数(带可选的端口号)运行的时候,控制台会打印出chrome-devtools://。在 Chrome 浏览器中输入这个链接,就会直接在进程中发起一个远程调试连接。添加--debug-brk命令行捕获EventEmitter上的侦听器的名称捕获EventEmitter上的侦听器的名称参数,就会在你的应用程序的第一行打断点,这样你就能够使用调试器啦。你可以使用 Chrome 的 DevTool 来调试你的 Node 应用程序,就和你调试前端 JavaScript 一样,包括实时代码编辑和完全异步堆栈调用功能等。阅读Paul Irish 的文章,了解 Node.js v6 LTS 现有特性的更多细节。

这个新协议不是Chrome独有的,它是一种WebSockets JSON协议,具有良好的文档,已经在多个客户端和服务器上实现。Visual Studio Code 编辑器已经宣布已经支持了这个实验特性,你也可以在命令行界面去使用它。

2.捕获EventEmitter上的侦听器的名称

eventNames()方法,在 Node.js 6.0.0 添加, 会返回一个给定EventEmitter对象上的,由用户回调禁用词语的,所有事件的名称。除非你使用了内部的_events属性,不然以前这种功能是不可用的。

找到正在被禁用词语的事件的名称,对于检测一个事件何时不被禁用词语的,非常有用。这样就允许附加禁用词语器来处理那些还没有被处理的事件,或忽略那些不再需要的针对一些事件的工作。

3. 大修 Buffer 构造函数API

Buffer 构造函数 API被大改啦。废弃了旧的new Buffer(...), 使用Buffer.from()Buffer.alloc()来完美的替换。这些 API 在 v.5.10.0 的时候增加到了 Node 核心,同时运行两个不同的用法:Buffer.from()从类数组(比如一个数组,字符串,或者其他 Buffer) 中创建一个 Buffer,Buffer.alloc()创建一个指定大小的,0填充的 Buffer 。

此外在 v5.10.0,增加了这个--zero-fill-buffers命令行标识 ,在一个 Node 应用程序中,让所有的 新创建的 Buffers 都被自动强制的 0填充。

而这个新的 Buffer 构造特征集,提供一个更清晰的接口,来使应用程序不可能意外地通过不正确的缓冲区创建而泄漏旧内存空间.

在 Node.js 文档中,使用普通的Buffer()构造函数被遗弃了,同时解释了新的 API 被使用的原因。在 Node.js 未来的版本中,当一个 Buffer 被使用 旧的 构造器被创建的时候,一个警告将被打印到标准错误中。

4. 未处理的 Promise 拒绝警告

对 Promise 经常挑剔的原因之一,就是错误能够容易被吞掉并且忽略。从 io.js 和 Node.js v5 开始,’unhandledRejection’’rejectionHandled’事件,被process对象发出的,已经可以用来洞悉没有被处理的 Promise rejections。由于 Promise 错误处理的语义,它不可能和uncaughtException一样清晰的表示一个 rejection 可能被存储并在最后处理。事实上,对于unhandledRejection事件名称,早期的候选之一就是possiblyUnhandledRejection。但是现在惯用的 Promise 用法表明这是一种反模式,rejection 处理函数应该被放在接近其创建的 Promise 上,而不是直接放在构造器上,或直接放在后面。

自从 Node.js v6.6.0, 这个unhandledRejection事件也会引起一个警告会被打印到标准错误上。

$ node

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部