【51CTO晃荡】8.26 带你深度懂得清华大年夜学、搜狗基于算法的IT运维实践与摸索

进修 Node.js 必定要懂得的内容之一,文中重要涉及到了 EventEmitter 的应用和一些异步情况的处理,比较偏基本,值得一读。
大年夜多半 Node.js 对象都依附了 EventEmitter 模块来监听和响应事宜,比如我们常用的 HTTP requests, responses, 以及 streams。
- const EventEmitter = require('events');
事宜驱念头制的最简单情势,是在 Node.js 中十分风行的回调函数,例如 fs.readFile。 在回调函数这种情势中,事宜每被触发一次,回调就会被触发一次。
我们先来摸索下这个最根本的方法。
你预备好了就叫我哈,Node!
良久良久以前,在 js 里还没有原生支撑 Promise,async/await 还只是一个遥远的妄图,回调函数是处理异步问题的最原始的方法。
回调大年夜本质上讲是传递给其他函数的函数,在 JavaScript 中函数是第一类对象,这也让回调的存在成为可能。
必定要搞清跋扈的是,回调在代码中的并不表示异步调用。 回调既可所以同步调用的,也可所以异步调用的。
- function fileSize (fileName, cb) {
- if (typeof fileName !== 'string') {
- // Sync
- return cb(new TypeError('argument should be string'));
- }
- fs.stat(fileName, (err, stats) => {
- if (err) {
- // Async
- return cb(err);
- }
- // Async
- cb(null, stats.size);
- });
- }
这其实也是个反例,如许写经常会引起一些不测的缺点,在设计宿主函数的时刻,应当尽可能的应用同一种风格,要么始终都是同步的应用回调,要么始终都是异步的。
举个例子,这里有一个宿主函数 fileSize,它接收一个回调函数 cb,并且可以经由过程前提断定来同步或者异步地调用该回调函数:
我们来研究下一?典范的异步 Node 函数的简单示例,它用回调样式编写:
readFileAsArray 函数接收两个参数:一个文件路径和一个回调函数。它攫取文件内容,将其拆分成行数组,并将该数组作为回调函数的参数传入,调用回调函数。
如今设计一个用例,假设我们在同一目次中的文件 numbers.txt 包含如下内容:
- 10
- 11
- 12
- 13
- 14
- 15
如不雅我们有一个需求,请求统计该文件中的奇数数量,我们可以应用 readFileAsArray 来简化代码:
- readFileAsArray('./numbers.txt', (err, lines) => {
- if (err) throw err;
- const numbers = lines.map(Number);
- const oddNumbers = numbers.filter(n => n%2 === 1);
- console.log('Odd numbers count:', oddNumbers.length);
- });
这擦?鲱纯粹的 Node 回调风格。回调的第一个参数要遵守缺点优先的原则,err 可认为空,我们要将回调作为宿主函数的最后一个参数传递。你应当一向用这种方法如许设计你的函数,因为用户可能会假设。让宿主函数把回调当做其最后一个参数,并让回调函数以一个可能为空的缺点对象作为其第一个参数。
推荐阅读
市纪委经由过程对大年夜数据云与干部填报的家庭房产等情况的量化数据比对,敏捷排查出漏报瞒报人员,进而大年夜干部工作、生活相干事项着手,抓早抓小、大年夜严监管,教导抢救了大年夜批干部,起到了强大年夜的教导>>>详细阅读
本文标题:[译]理解Node.js事件驱动机制
地址:http://www.17bianji.com/lsqh/36743.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示