nodejs異步---Async
一:異步基礎
1.由於node.js天生就是異步,所以效率很高,性能強。
console.log(‘hi!‘); setTimeout(function(){ console.log(‘hello!‘); },1000); console.log(‘wow!‘);
比如這個,輸出結果:hi
wow!
hello!
可以看出nodejs的異步性
2.高階函數
高階函數給我的感覺就是閉包。
function test(a){ return function(b){ return a+b; } } var q=test(2)(3); console.log(q);
返回值是一個函數,函數作為參數傳遞。
3.偏函數----------個人理解就是閉包
假設有一個參數或變量已經預置的函數A,我們通過調用A來產生一個新的函數B,函數B就是我們說的偏函數
function test(a){ return function(b){ console.log(a+" say "+b); } } var q=test("tom")("hello");
偏函數:一個創建函數的工廠函數;通過指定部分參數,定制新的函數。
但是兩個都是閉包的一種。
二.Async異步
首先安裝async-----這個就不多說
npm install async
1.series(tasks,callback)
var async=require("async"); async.series({ one: function(callback){ callback(null,1) ; }, two: function(callback){ callback(null,2) ; } },function(err, results) { console.log(results) });
這樣會按照寫入順序依次執行各個函數,結果是一個集合{ one: 1, two: 2 }
註意:series函數的第一個參數可以是一個數組也可以是一個JSON對象,參數類型不同,影響的是返回數據的格式
2,waterfall(tasks,callback)
var async=require("async"); async.waterfall([ function(callback){ //task1 callback(null,1); },function(data,callback){ console.log(data); callback(null,2); } ],function(err,results){ console.log(results); });
和series()函數一樣,會依次執行各個函數,但是每一個函數執行成功後產生的值傳給下一個函數,而不是results
註意:waterfall的tasks參數只能是數組類型。
3.parallel函數(tasks,callback)
var async=require("async"); async.parallel([ function(callback){ callback(null, ‘one‘); }, function(callback){ callback(null, ‘two‘); } ], function(err, results){ console.log(results); });
parallel函數是並行執行多個函數,每個函數都是立即執行,不需要等待其它函數先執行。 傳給最終callback的數組中的數據按照tasks中聲明的順序,而不是執行完成的順序
註意:tasks參數可以是一個數組或是json對象,和series函數一樣,tasks參數類型不同,返回的results格式會不一樣。
4.parallelLimit(tasks,limit,callback)
var async=require("async"); async.parallelLimit([ function(callback){ setTimeout(function(){ callback(null, ‘one‘); }, 3000); }, function(callback){ setTimeout(function(){ callback(null, ‘two‘); }, 1000); } ], 2,//設置同時執行的函數個數 function(err, results){ console.log(results); });
如果limit是1的話,那麽4S執行完畢,如果limit是2,那麽3S解決完畢。
5.whilst(test,fn,callback)
test參數是一個返回布爾值結果的函數,通過返回值來決定循環是否繼續,作用等同於while循環停止的條件.
var async = require(‘async‘); var j = 0; async.whilst( function(){ return j<3; }, function(callback){//記得此處應該有回調函數 j++; console.log(‘whileCb‘+j); callback(); }, function(err){ } )
callback()就是達到了條件就會循環。
6.iterator(tasks)
var iter = async.iterator([ function(){console.log(‘111‘);}, function(){console.log(‘222‘);}, function(){console.log(‘333‘);} ]); var it1 = iter(); it1();
這個感覺很重要,但是目前理解不夠,正在學習!
本博客相當於課程筆記吧!
/*async課程:http://www//com/course/543e1a4f032c7816c0d5dfa1
//內容是.hubwiz.
*/
nodejs異步---Async