天天看點

Async源碼分析

最近在使用到node js的async庫的時候,對其waterfall的實作感覺很奇妙,于是看了一下源碼:

開始先對參數進行了檢查,判斷tasks是否是一個function數組。然後使用了一個内部函數wrapIterator封裝了實作。wrapIterator的參數帶出了async.iterator函數:

這個函數,其主要實作是其内部函數makeCallback。其功能就是疊代tasks,封裝其中的每一個function,讓其執行後傳回下一個function,以此實作疊代。

接下來,再回到wrapIterator,此function是對iterator的封裝。執行後傳回的是一個匿名function。其明确的參數隻有一個err。當err不為空的時候,直接執行callback function。否則從index為1開始取出參數清單,并把iterator的下一個function包裝之後push到args中(如果沒有下一個function了則push回調函數)。接下來,則執行目前的iterator,執行的參數是下一個iterator function(作為這一步的回調函數)以及參數(如果目前的iterator被調用時傳遞了其他參數)。這樣在目前iterator中回調下一個iterator,依次疊代執行,直至執行完所有function和callback。

原文出處:後端技術雜談

<a href="http://www.rowkey.me/blog/2014/08/22/node-async-analysis/" target="_blank">原文連結</a>

轉載請與作者聯系,同時請務必标明文章原始出處和原文連結及本聲明。

繼續閱讀