Nodejs異步編程一——發佈/訂閱

我們剛開始學習nodejs時難免會寫出這樣的代碼,一旦嵌套過深,代碼將變得很難維護

var fs = require("fs")
var path = require("path")

// 原始函數
fs.readdir(path.normalize('/test'), function(err, files){
    files.forEach(function(filename, index){
        fs.readFile(path.normalize('/test/'+filename), 'utf-8', function(err, file){
            // TODO
            console.log(file)
        })
    })
})

利用事件的發佈/訂閱解除嵌套

var EventEmitter = require("events");
var emitter = new EventEmitter();

fs.readdir(path.normalize('/test'), function(err, files){
    emitter.emit("iterate files", files);
})

emitter.on("iterate files", function(files){
    files.forEach(function(filename, index){
        emitter.emit("read file", path.normalize('/test/'+filename))
    })
})

emitter.on("read file", function(filePath){
    fs.readFile(filePath, "utf-8", function(err, file){
        // TODO
        console.log(file);
    })
})
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章