app开发者平台在数字化时代的重要性与发展趋势解析
609
2022-11-16
nodejs-REPL/回调函数/事件循环
REPL 回调函数 事件循环REPL-----------------------------------------------------Node.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电脑的环境,类似 Window 系统的终端或 Unix/Linux shell,我们可以在终端中输入命令,并接收系统的响应。REPL可以执行如下任务{ 读取 - 读取用户输入,解析输入了Javascript 数据结构并存储在内存中。 执行 - 执行输入的数据结构 打印 - 输出结果 循环 - 循环操作以上步骤直到用户两次按下 ctrl-c 按钮退出。}简单的表达式运算 > 1 + ( 2 * 3 ) - 4使用变量 > var y = 10多行表达式{ > var x = 0 undefined > do { ... x++; ... console.log("x: " + x); ... } while ( x < 5 );}下划线(_)变量你可以使用下划线(_)获取上一个表达式的运算结果:{ $ node > var x = 10 undefined > var y = 20 undefined > x + y 30 > var sum = _ undefined > console.log(sum) 30 undefined >}REPL 命令{ ctrl + c - 退出当前终端。 ctrl + c 按下两次 - 退出 Node REPL。 ctrl + d - 退出 Node REPL. 向上/向下 键 - 查看输入的历史命令 tab 键 - 列出当前命令 .help - 列出使用命令 .break - 退出多行表达式 .clear - 退出多行表达式 .save filename - 保存当前的 Node REPL 会话到指定文件 .load filename - 载入当前 Node REPL 会话的文件内容}回调函数-----------------------------------------------------回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数。回调函数一般作为函数的最后一个参数出现function foo1(name, age, callback) { }function foo2(value, callback1, callback2) { }----阻塞代码实例创建文件input.txt内容是{ inputmessage}然后创建main.js 内容是{ var fs = require("fs"); var data = fs.readFileSync('input.txt'); //synchronization 同步 console.log(data.toString()); console.log("程序执行结束!");}输出{ inputmessage 程序执行结束!}----非阻塞代码实例 创建文件input.txt内容和上面一样。 然后main.js代码改成这样{ var fs = require("fs"); fs.readFile('input.txt', function (err, data) { if (err) return console.error(err); console.log(data.toString()); }); console.log("程序执行结束!");}输出{ 程序执行结束 inputmessage }事件循环----------------------------------------------------- Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高。 Node.js 几乎每一个 API 都是支持回调函数的。 Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。 Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数. Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件,如下实例: // 引入 events 模块 var events = require('events'); // 创建 eventEmitter 对象 var eventEmitter = new events.EventEmitter(); // 创建事件处理程序 var connectHandler = function connected() { console.log('连接成功。'); // 触发 data_received 事件 eventEmitter.emit('data_received'); } // 绑定 connection 事件处理程序 eventEmitter.on('connection', connectHandler); // 使用匿名函数绑定 data_received 事件 eventEmitter.on('data_received', function(){ console.log('数据接收成功。'); }); // 触发 connection 事件 eventEmitter.emit('connection'); console.log("程序执行完毕。");执行结果{ 连接成功。 数据接收成功。 程序执行完毕。} Node 应用程序是如何工作的?{ 在 Node 应用程序中,执行异步操作的函数将回调函数作为最后一个参数, 回调函数接收错误对象作为第一个参数。 input.txt{ inputmessage } var fs = require("fs"); fs.readFile('input.txt', function (err, data) { if (err){ console.log(err.stack); return; } console.log(data.toString()); }); console.log("程序执行完毕"); 执行结果{ 程序执行完毕 inputmessage } 删除input.txt让他报错,执行结果是这样的{ 程序执行完毕 Error: ENOENT: no such file or directory, open 'C:\Users\Administrator\Desktop\S\input.txt' }}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~