CO函數庫源碼解析
一、co函數是什麼
co 函數庫是著名程序員 TJ Holowaychuk 於2013年6月發布的一個小工具,用於 Generator 函數的自動執行。短小精悍只有短短200餘行,就可以免去手動編寫Generator 函數執行器的麻煩
二、co函數怎麼用
舉個栗子就能清楚的知道如何使用co函數
手動執行和co函數執行的寫法如下
兩者的差別應該一眼就能看出來了。
三、co函數如何實現自動執行
co用promise的特性,將整個Generator函數包裝在一個promise下,利用Generator的next鏈,循環調用co方法將不同的next任務分別包裝為不同的子promise。根據next的狀態來執行不同的resolve,進而實現自動執行。
基本流程如下圖,忽略我渣渣的畫圖能力
具體如何實現,下面一起看下源碼
四、co源碼解析
為了更好的分析,還是對源碼的方法進行分類主要有以下兩類:
4.1 輔助函數
輔助函數很好理解了,主要是用來做類型判斷,參數解析等功能的。直接看代碼
4.2 功能函數,這裡就按調用流程看
co:入口函數,將傳入的函數先做類型判斷然後返回一個promise對象
這裡首先生成一個gen函數實例,如果gen非generater函數,直接執行resolve
然後調用onFulfilled函數,即先執行一次generater.next,將value作為後面的執行的參數
然後就到了實現自動執行的關鍵函數next
題外話,既然是實現了自動調用,無非是遞歸和迭代來調用執行函數,next函數就負責該部分內容
看到這裡可能會問,具體的循環調用是在哪裡實現的,不要急咱們再看下toPromise的實現:
這裡就是將各種類型轉化為對應的promise,然後執行。到此co的整體流程就結束了。其他的如何實現這裡就不做講述了。
上面就是我研究co源碼之後的一些個人體會,希望能對其他人有所幫助。
PHP學習交流群,免費視頻學習資料:365672221
更多精彩內容,訪問中公優就業官網:http://xue.ujiuye.com/?wt.bd=zt36716tt
500萬就業基金助力,2017大學生就業扶助計劃:http://www.ujiuye.com/zt/jyfc/?wt.bd=zt36716tt
※「腦殘粉「是種什麼樣的存在?
※開學季,你不能錯過的撩妹脫單秘籍!
TAG:IT優就業 |
※Dao層+資料庫解析數據
※奇門遁甲數碼預測思維解析
※《COMPASS》十文字雅達利詳細解析
※KOT:卡澳鏈 COIN基於ETH的數字密碼解析
※解析:PS圖層概念
※DIY電腦電源解析!
※小蟻NEO錢包賬號創建原理解析
※彩虹六號:Kaid武器數據解析
※電腦CPU故障問題解析
※深入解析JIT編譯
※Redis集群分區原理及客戶端源碼解析
※三款熱銷18W USB PD充電器拆解:快充方案大解析
※《COMPASS戰鬥天賦解析系統》玩法大解析
※c井Queue源碼解析
※詳細解析如何設計英文LOGO字體
※使用 Python 解析參數
※解析ICO詐騙和傳銷
※取證大師APFS加密數據解析功能重磅上線!
※H1B中籤查詢途徑解析
※解析《#COMPASS戰鬥天賦解析系統》炮娘