学前端,找工作,点这里

nodejs

nodejs是单线程单进程应用程序,但是V8引擎提供的异步执行回调接口可以处理大量的并发,nodejs性能非常高。nodejs积分每一个api都支持回调函数。

回调函数

要点:异步函数将回调函数作为最后一个参数,回调函数接受错误对象为第一个参数。异步编程依托回调来实现,nodejs异步编程直接体现酒是回调。

阻塞代码实列  

添加一个app.js  data.txt



var fs = require('fs');



var data = fs.readFileSync('data.txt');



console.log(data.toString());



console.log('程序执行完成');
 

执行

非阻塞代码



/**

*

* 回调作为异步最后一个

* 错误对象作为回调第一个参数

*

* */

fs.readFile('data.txt', function (err, data) {

if (err) return console.error(err);

console.log(data.toString());



})

console.log('程序执行完成');
 

 运行:

事件 

驱动原理:nodejs使用事件驱动模型,当webservice接收到请求,就关闭它然后惊喜处理,然后去服务下一个web请求,当这个请求完成,它被放回处理列队,当列队达到列开头,这个结果被返给用户。

绑定和监听事件



/**

*

* 1.引入events模块

* 2.创建事件监听和事件处理程序

* 3.触发事件

*

*/





var events = require('events');



var eventEmitter = new events.EventEmitter();

var myevtHandler = function () {

console.log('我是处理程序!');

}

eventEmitter.on('myevt', myevtHandler);

eventEmitter.emit('myevt');
 

运行

监听器传参



/**

*

* 1.引入events模块

* 2.创建事件监听和事件处理程序

* 3.触发事件

*

*/





var events = require('events');



var eventEmitter = new events.EventEmitter();

var myevtHandler = function () {

console.log('我是处理程序!');

}

eventEmitter.on('myevt', myevtHandler);





var listerHandler0 = function () {

console.log(0);



}



var listerHandler = function (a, b) {

console.log(a, b);



}



var listerHandler2 = function (a) {

console.log(a);



}



var listerHandler3 = function (a, b, c) {

console.log(a);



}



/**

*

* 一个事件多个监听器时

* 会先后调用监听器回调函数

*

*/

eventEmitter.on('lister', listerHandler0);

eventEmitter.on('lister', listerHandler);

eventEmitter.on('lister', listerHandler2);

eventEmitter.on('lister', listerHandler3);





eventEmitter.emit('myevt');

/**

* 按参数顺序执行监听器 有事件监听返回true 否则false

*/

console.log(eventEmitter.emit('lister', 1, 2));

console.log(eventEmitter.emit('lister2', 1, 2));
 

运行: 

 

其他属性

 

1 addListener(event, listener)
为指定事件添加一个监听器到监听器数组的尾部。
2 on(event, listener)
为指定事件注册一个监听器,接受一个字符串 event 和一个回调函数。

server.on('connection', function (stream) {

console.log('someone connected!');

});
 
3 once(event, listener)
为指定事件注册一个单次监听器,即 监听器最多只会触发一次,触发后立刻解除该监听器。

server.once('connection', function (stream) {

console.log('Ah, we have our first user!');

});
 
4 removeListener(event, listener)

移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器。

它接受两个参数,第一个是事件名称,第二个是回调函数名称。



var callback = function(stream) {

console.log('someone connected!');

};

server.on('connection', callback);

// ...

server.removeListener('connection', callback);
 
5 removeAllListeners([event])
移除所有事件的所有监听器, 如果指定事件,则移除指定事件的所有监听器。
6 setMaxListeners(n)
默认情况下, EventEmitters 如果你添加的监听器超过 10 个就会输出警告信息。 setMaxListeners 函数用于提高监听器的默认限制的数量。
7 listeners(event)
返回指定事件的监听器数组。
8 emit(event, [arg1], [arg2], [...])
按参数的顺序执行每个监听器,如果事件有注册监听返回 true,否则返回 false。
 
 
学完还想练练?点这里