您的位置:首页 > Web前端 > Node.js

深入浅出nodejs学习笔记——异步编程

2016-03-28 16:38 726 查看
高阶函数:与传统函数只能传递或返回规定的数据类型相比,高阶函数可以返回函数,如下:

function foo(x){

return function(){

return x;

}

}

由于高阶函数可以传递函数为参数,因此可以传递不同类型的函数来实现不同的功能,更加灵活

使用偏函数,如果要创建一组函数,比如isFunction,isString等功能类似的函数,如果每个都独自定义会很麻烦,可以使用统一的方式定义,通过参数的传递让这个函数像工厂一样生产类似的函数,代码如下:

var isType = function(type){

return function(obj){

returntoString.call(obj) == ‘[object’ + type + ‘]’;

}

}

var isString = isType(‘String’);

这样就可以取代如下复杂麻烦的分别定义方法:

var isString = function(type){

return function(obj){

returntoString.call(obj) == ‘[object String]’;

}

}

……

异步编程的难点:

1、 异常处理方面,不能使用try-catch方法

异步I/O的实现主要包括两个阶段:提交请求和处理结果

异步方法的定义:

var async = function(callback){

process.nextTick(callback);//nextTick()表示下一个事件循环

}

try/catch方法只能捕获当此事件循环内的异常,不能捕获callback执行时抛出的异常

编写异步方法的原则:必须执行调用者传入的回调函数;正确传递回异常供调用者判断。示例代码:

var async = function(callback){

process.nextTick(function(){

var result = something;

if(error){

return callback(error);

}

Callback(null,result);

})

}

2、 函数嵌套过深

3、 阻塞代码(js中没有类似sleep()的线程沉睡功能)

4、 多线程编程

事件发布/订阅模式:

//订阅

emitter.on(“event1”,function(message){

console.log(message);

});

//发布

Emitter.emit(’event1’, “I am a message!”);

这里利用on和emit方法,对对象的事件进行侦听和发布

关于EventListener

EventEmitter是nodejs核心的一部分。很多nodejs对象继承自EventEmitter,用来处理事件,及回调。来看API中的例子
Javascript代码
var util = require("util");
var events = require("events");//EventEmitter通过events模块来访问

function MyStream() {//新建一个类
events.EventEmitter.call(this);
}

util.inherits(MyStream, events.EventEmitter);//使这个类继承EventEmitter

MyStream.prototype.write = function(data) {//定义一个新方法
this.emit("data", data);//在此触发名为"data"事件
}

var stream = new MyStream();

stream.on("data", function(data) {//注册监听器,监听名为"data"事件
console.log('Received data: "' + data + '"');
})
stream.write("It works!"); // Received data: "It works!"


通过继承EventEmitter可为对象注册和触发相关事件。

实现一个继承EventEmitter的类的实例:

var events = require(‘events’);

function Stream(){

event.EventEmitter.call(this);

}

util.inherits(Stream,events.EventEmitter);

//util模块中封装了集成的方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: