1. 程式人生 > >nodejs異步---Async

nodejs異步---Async

影響 我們 ++ lec 一個 brush 數組 最終 ava

一:異步基礎

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