千鋒教育-做有情懷、有良心、有品質的職業教育機構

領取全套視頻

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  關于學院  >  技術論壇  >  正文

千鋒web前端培訓班:koa中間件是如何實現的?

時間:2021-08-27 08:35     來源:千鋒教育 作者:小千
分享: 更多

      在前端開發過程中我們可能會使用到koa中間件,但很多同學卻不知道它是如何實現的,下面小千就來給大家介紹一下這個koa中間件(洋蔥模型)。

      一、問題分析

      async await是promise的語法糖,await后面跟一個promise,所以上面的代碼可以寫成:

千鋒web前端培訓1

      改成這樣更好理解一些,所以流程控制的核心在于next的實現。next要求調用隊列中下一個middleware,當達到最后一個的時候resolve。這樣最后面的promise先resolve,一直到第一個,這樣就是洋蔥模型的順序了。

      二、實現

      koa-compose的實現是這樣的:

千鋒web前端培訓2

      我們把一些參數檢查的非核心邏輯去掉了,實現代碼就上面那些。每次傳入的next都是調用下一個middleware,這樣是一個遞歸的過程,結束條件是最后一個middleware的next是用戶傳入的。

      這里面有一些亮點:

      1.這是一種尾遞歸的形式,尾遞歸的特點是最后返回的值是一個遞歸的函數調用,這樣執行完就會在調用棧中銷毀,不會占據調用棧.

      2.返回的是一個Promise.resolve包裝之后的調用,而不是同步的調用,所以這是一個異步遞歸,異步遞歸比同步遞歸的好處是可以被打斷,如果中間有一些優先級更高的微任務,那么可以先執行別的微任務

      3.compose是函數復合,把n個middleware復合成一個,參數依然是context和next,這種復合之后依然是一個middleware,還可以繼續進行復合。

      三、總結

      Koa 中間件的實現原理,也就是洋蔥模型的實現原理,核心在于next的實現。next需要依次調用下一個middleware,當到最后一個的時候結束,這樣后面middleware的promise先resolve,然后直到第一個,這樣的流程也就是洋蔥模型的流程了。

      實現的時候還有一些細節,一個是遞歸最好做成尾遞歸的形式,而是用異步遞歸而不是同步遞歸,第三就是形式上用函數復合的形式,這樣復合之后的中間件還可以繼續復合。

      已上就是koa中間件的實現原理和案例介紹了,相信大家看完之后就能明白了,最后歡迎對web前端開發培訓感興趣的同學來到千鋒web前端培訓班參加我們的web前端培訓課程的學習,為期兩周的免費試聽,更有全套web前端學習資料領取,趕緊來找在線老師了解一下。

      千鋒web前端培訓班:http://www.dtmask.com/page/html5.html

相關文章

  • 北京總部地址:北京市海淀區寶盛北里西區28號中關村智誠科創大廈4層
    北京沙河校區:北京市昌平區沙陽路18號北京科技職業技術學院廣場服務樓
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、云計算培訓、全棧軟件測試培訓、大數據+人工智能培訓、智能物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發培訓、PHP全棧+服務器集群培訓、網絡安全培訓、網絡營銷培訓、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 深圳校區地址:深圳市寶安區寶安大道5010號西部硅谷B座A區6層A605/B座C區1層108
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、云計算培訓、全棧軟件測試培訓、大數據+人工智能培訓、智能物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發培訓、PHP全棧+服務器集群培訓、網絡安全培訓、網絡營銷培訓、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 上海校區地址:上海市寶山區同濟支路199號智慧七立方3號樓2-4層
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、云計算培訓、全棧軟件測試培訓、大數據+人工智能培訓、智能物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發培訓、PHP全棧+服務器集群培訓、網絡安全培訓、網絡營銷培訓、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 廣州校區地址:廣州市白云區永平街永泰學山塘學山文化創意谷A1棟六樓
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、云計算培訓、全棧軟件測試培訓、大數據+人工智能培訓、智能物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發培訓、PHP全棧+服務器集群培訓、網絡安全培訓、網絡營銷培訓、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 鄭州二七區校區地址:鄭州市二七區航海中路60號海為科技園C區10層
    鄭州高新區校區地址:鄭州市高新區金梭路與銀杏路交叉口教育科技產業園南門D座4層
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、云計算培訓、全棧軟件測試培訓、大數據+人工智能培訓、智能物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發培訓、PHP全棧+服務器集群培訓、網絡安全培訓、網絡營銷培訓、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 大連校區地址:遼寧省大連市高新園區愛賢街10號大連設計城A座901
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、云計算培訓、全棧軟件測試培訓、大數據+人工智能培訓、智能物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發培訓、PHP全棧+服務器集群培訓、網絡安全培訓、網絡營銷培訓、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 武漢金融港校區地址:武漢市東新區光谷大道77號金融港B18棟三、四層
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、云計算培訓、全棧軟件測試培訓、大數據+人工智能培訓、智能物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發培訓、PHP全棧+服務器集群培訓、網絡安全培訓、網絡營銷培訓、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 成都校區地址:成都市高新區肖家河沿街138號肖家河大廈三樓
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、云計算培訓、全棧軟件測試培訓、大數據+人工智能培訓、智能物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發培訓、PHP全棧+服務器集群培訓、網絡安全培訓、網絡營銷培訓、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 西安校區地址:西安市雁塔區高新六路52號立人科技C座西區4樓
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、云計算培訓、全棧軟件測試培訓、大數據+人工智能培訓、智能物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發培訓、PHP全棧+服務器集群培訓、網絡安全培訓、網絡營銷培訓、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 杭州旺田校區:浙江省杭州市上城區九堡鎮旺田書畫城A座4層
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、云計算培訓、全棧軟件測試培訓、大數據+人工智能培訓、智能物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發培訓、PHP全棧+服務器集群培訓、網絡安全培訓、網絡營銷培訓、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 青島校區地址:青島市市北區龍城路31號卓越世紀中心4號樓5層
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、云計算培訓、全棧軟件測試培訓、大數據+人工智能培訓、智能物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發培訓、PHP全棧+服務器集群培訓、網絡安全培訓、網絡營銷培訓、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 重慶校區地址:重慶市高新區科園一路2號大西洋國際12-1
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、云計算培訓、全棧軟件測試培訓、大數據+人工智能培訓、智能物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發培訓、PHP全棧+服務器集群培訓、網絡安全培訓、網絡營銷培訓、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 長沙校區地址:湖南省長沙市岳麓區麓谷企業廣場A2棟三單元306號
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、云計算培訓、全棧軟件測試培訓、大數據+人工智能培訓、智能物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發培訓、PHP全棧+服務器集群培訓、網絡安全培訓、網絡營銷培訓、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 哈爾濱校區地址:哈爾濱市松北區世澤路689號 科技創新城4號樓405
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、云計算培訓、全棧軟件測試培訓、大數據+人工智能培訓、智能物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發培訓、PHP全棧+服務器集群培訓、網絡安全培訓、網絡營銷培訓、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 南京校區地址:南京市建鄴區應天大街780號弘輝產業園1棟2層
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、云計算培訓、全棧軟件測試培訓、大數據+人工智能培訓、智能物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發培訓、PHP全棧+服務器集群培訓、網絡安全培訓、網絡營銷培訓、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 太原校區地址:太原市小店區長治路230號能源互聯網大廈6層
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、云計算培訓、全棧軟件測試培訓、大數據+人工智能培訓、智能物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發培訓、PHP全棧+服務器集群培訓、網絡安全培訓、網絡營銷培訓、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 沈陽校區地址:遼寧省沈陽市渾南區世紀路16號東大軟件園B園B1座A201
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、云計算培訓、全棧軟件測試培訓、大數據+人工智能培訓、智能物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發培訓、PHP全棧+服務器集群培訓、網絡安全培訓、網絡營銷培訓、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 合肥校區地址:合肥市包河區徽州大道396號東方廣場B座12A
    咨詢電話:400-811-9990
    面授課程:HTML5大前端培訓、JavaEE+分布式開發培訓、Python全棧+人工智能培訓、全鏈路UI/UE設計培訓、云計算培訓、全棧軟件測試培訓、大數據+人工智能培訓、智能物聯網+嵌入式培訓、Unity游戲開發培訓、Go語言開發培訓、PHP全棧+服務器集群培訓、網絡安全培訓、網絡營銷培訓、好程序員
    認證課程:軟考、Adobe認證、PMP認證、紅帽RHCE認證
  • 千鋒教育服務號

    了解千鋒動態
    關注千鋒教育服務號

  • 千鋒教育移動站

    掃一掃快速進入
    千鋒移動端頁面

  • 千鋒互聯服務號

    掃碼匿名提建議
    直達CEO信箱

[an error occurred while processing the directive]