Node 以异步著称,性能非常的好,但是在开发过程中我们时常要规避一些异步执行,要让程序按同步执行,如下的代码可以说明存在的问题。
var fs=require('fs');
console.log('1');
fs.readFile('FileType.json',function(err,data){
console.log('2');
});
console.log('3');
以上代码依次执行 1、3 、2,实现宏观上并发执行,无法按照我们的设想顺序执行1 、2 、3
常见处理Node异步的方法有两种,一种是利用事件回调处理异步,另外一种是利用事件驱动处理异步。
1. 利用事件回调的方法如下:
var fs=require('fs');
function getType(callback){
fs.readFile('FileType.json',function(err,data){
callback(data);
})
};
getType(function(result){
console.log(result.toString());
});
基本的原理为将方法作为参数传入函数中,在函数执行获取结果后,调用传入的方法将结果返回。
2. 利用事件驱动处理异步
// 引入模块
var events=require('events');
// 实例化对象
var EventEmitter=new events.EventEmitter();
// 监听to_parent的广播,但不执行,2秒以后广播了才开始执行。
EventEmitter.on('to_parent',function(data){
console.log(data);
// 给parent发送的数据
});
setTimeout(function(){
// 广播to_parent事件
EventEmitter.emit('to_parent','给parent发送的数据');
},2000);
实例化一个事件对象,然后通过on监听事件名和要接收的数据,通过emit广播事件名和要传播的数据,监听和广播的事件名必须一一对应。