Node.js以異步著稱,性能非常的好,但是在開發過程中我們時常要規避一些異步執行,要讓程式按同步執行,如下的代碼可以說明存在的問題。
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.js異步的方法有兩種,一種是利用事件回調處理異步,另外一種是利用事件驅動處理異步。
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廣播事件名和要傳播的資料,監聽和廣播的事件名必須一一對應。