zoukankan      html  css  js  c++  java
  • 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:UsersAdministratorDesktopSinput.txt'
    	}
    }	
    
    
    	
    
    
    
  • 相关阅读:
    DB2 SQL1477N问题
    db2 查看表空间使用率
    DB2中的数据类型
    DB2锁机制
    DB2数据库常用命令数据库学习
    DB2 sql报错后查证原因与解决问题的方法
    F. Bakkar In The Army 二分
    On the way to the park Gym
    csu 1552: Friends 二分图 + Miller_Rabin
    Gym
  • 原文地址:https://www.cnblogs.com/csnd/p/12061868.html
Copyright © 2011-2022 走看看