天天看點

Node.js處理異步的方式

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廣播事件名和要傳播的資料,監聽和廣播的事件名必須一一對應。