0.Nimble
在Node.js中,異步編程技術(shù)讓我們可以同時處理多個任務(wù),這也是Node.js適用于高并發(fā)需求的原因之一。
不過有時候矫夯,我們?nèi)匀恍枰獜?qiáng)調(diào)執(zhí)行的順序,這就導(dǎo)致我們會不斷地將回調(diào)函數(shù)嵌套進(jìn)第一個調(diào)用的函數(shù)吊洼,導(dǎo)致整段代碼嵌套得很深训貌。舉個例子,我們要讀取5個文件冒窍,且必須按順序讀取递沪。一般情況下,我們會這樣書寫:
var fs = require('fs');
var exc = function(){
fs.readFile(path1, function(){
fs.readFile(path2, function(){
fs.readFile(path3, function(){
fs.readFile(path4, function(){
console.log("Finished Reading!");
});
});
});
});
};
exc();
為了讓結(jié)構(gòu)更為清晰综液,我省略了很多判斷條件款慨、回調(diào)函數(shù)的參數(shù),僅保留了基本的嵌套結(jié)構(gòu)谬莹。
從這個結(jié)構(gòu)可以看出來檩奠,假如我們還要讀取更多的文件,那么這樣的嵌套還會持續(xù)下去附帽;試想一下埠戳,如果某個流程有幾十個函數(shù),最終的代碼會是恐怖的嵌套蕉扮,滿屏的縮進(jìn)整胃;這種代碼的可讀性和可維護(hù)性是很差的。
那么能不能像書寫普通函數(shù)一樣依次書寫要執(zhí)行的函數(shù)呢慢显?Nimble等工具提供了這樣的方法。你可以通過npm安裝它:
npm install nimble
然后就可以這樣做:
var fs = require('fs');
var flow = require('nimble');
flow.series([
function(callback) {
fs.readFile(path1, function(){
callback();
});
},
function(callback) {
fs.readFile(path2, function(){
callback();
});
},
function(callback) {
fs.readFile(path3, function(){
callback();
});
},
function(callback) {
fs.readFile(path4, function(){
callback();
});
},
// ....
], function(){console.log("Finished Reading!");});
從代碼量上看欠啤,nimble并不占優(yōu)勢荚藻,但在可讀性和可維護(hù)性上,完爆上面實例幾條街洁段。
關(guān)于Nimble的內(nèi)容這里不再介紹应狱,有興趣的朋友可移步這里:nimble
2.Nimble的實例
2.1 部署Express
如果不知道如何部署,可參照: 部署Express
2.2 安裝Nimble
npm install nimble
2.3 Demo
在routes/index.js文件中把"/"的路由更改為:
router.get('/', function(req, res, next) {
flow.series([
function(callback){
setTimeout(function(){
console.log('This is Function 1');
callback();
},
1000);
},
function(callback){
setTimeout(function(){
console.log('This is Function 2');
callback();
},
1000);
},
function(callback){
setTimeout(function(){
console.log('This is Function 3');
callback();
},
1000);
},
], function(){console.log("Finished!!!");
});
console.log('This function is not in flow!');
res.render('index', { title: 'Express' });
});
這里我用setTimeout()來模擬異步函數(shù)祠丝,隊列里共有3個函數(shù)疾呻,每個函數(shù)都要等待1秒鐘才能執(zhí)行。
運行應(yīng)用:
supervisor bin/www
或
node bin/www
在瀏覽器輸入127.0.0.1:3000即可看到如下結(jié)果:
更多資料可參考:
http://blog.rajatpandit.com/
參考書籍:《Node.js實戰(zhàn)》写半,Mike Cantlon, Marc Harter, T.J.Holowaychuk, Nathan Rajlich著岸蜗,人民郵電出版社
原創(chuàng)文章,未經(jīng)許可叠蝇,請勿轉(zhuǎn)載
作者:Mike的讀書季
日期:2016.09.22
QQ:1139904786
Blog:http://blog.csdn.net/kkdestiny