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'
	}
}	


	


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值