node.async.auto


 

資料

GITHUB async

ASYNC詳解—from csdn

nodejs的高性能與靈活性讓服務端開發變得有了些樂趣,最近在看nodejs在服務端的一些應用,覺得其npm下的眾多開源包讓其雖沒有大型的框架 卻能更自由的引用外部的模塊編寫屬於自己風格的代碼架構。

學習過程中,最讓人覺得頭痛的地方,個人覺得是異步執行,習慣了順序執行代碼的開發過程,開始的時候,因為面向對象的思想,封裝繼承多態的理論已經深入各編程語言,所以在進行設計的時候,好好的跌了一個跟頭,發現原本清晰的業務邏輯,在執行后變得換亂不堪,其原因多在代碼沒有按照我的順序或邏輯在執行。

后來才知道,原來上面遇到的問題是所有學習js的人都會經過的“名坑”,解決的方法也有很多。

其中最簡單的一種就要屬回調函數了,在js中,方法可以作為參數傳遞是其比較有趣的一個地方,而js中的異步執行造成 方法間的數據傳遞很不方便,需要借助回調函數的方式才能使用,但在回調函數以外,如果想用到這個數據,就要等這個方法執行完畢,而調用代碼執行的時候,可能數據賦值的代碼還未執行完,造成取不到值。

簡單的回調函數 雖然解決了代碼順序執行的問題,但接下來,問題又來了,那就是回調函數之間,是嵌套的,深度的邏輯嵌套才能造成回調函數的正確執行邏輯和拿到我們想要拿到的數據,雖然在寫回調函數加上注釋的時候,個人覺得代碼是更加流暢和可靠的,但在其可讀性和代碼量上 又是一個新的挑戰。業務流程逐漸的加多,數據間的關系逐漸復雜時,業務之間的代碼塊變得越來越龐大和不易維護,相同作用的代碼寫了一遍又一遍,數據的傳遞也越發的困難和混亂。

試過了node中的很多種流程控制的方法,最舒服的就該屬async了。

引用async模塊,可以很好的實現代碼的控制,保持代碼的美觀,其他的方法就不介紹了,在這里介紹一個auto方法,通過定義的function參數 、回調函數和數據結果集、方法間的相互依賴關系 可以很輕松的制定出代碼規范的業務流程,使自己的業務邏輯既可以順序執行,又對一些不必順序執行的部分實施異步執行。

 

var async = require('async');

var funclist = {
    func1: function (callback, results) {
        console.log('func1執行,傳入值{name:123}')
        callback(null, {name:'123'});
    },
    func2: function (callback, results) {
        console.log('func2執行,傳入值 { "puncha": "during" }')
        //console.log(results);
        callback(null, { "puncha": "during" });

    },
    func3: ["func2", function (results, callback) {
        console.log('func3在func2執行后執行,傳入值 3')
       // console.log(results);
        callback(null, 3);
    }],
    func4: ["func3", function (results,callback) {
        console.log('func4在func3執行后執行,總體執行結果為:')
        console.log(results);
        callback(null);
    }]
};

async.auto(funclist);

 

以上代碼執行結果為:

func1執行,傳入值{name:123}
func2執行,傳入值 { "puncha": "during" }
func3在func2執行后執行,傳入值 3
func4在func1執行后執行(根據以上邏輯,執行順序為 func1先執行,func2,4並行,func3最后執行 ),總體執行結果為:
{ func1: { name: '123' }, func2: { puncha: 'during' }, func3: 3 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM