web前端技術分享:koa中介軟體是如何實現的?
在 前端開發過程中我們可能會使用到koa中介軟體,但很多同學卻不知道它是如何實現的,下面小千就來給大家介紹一下這個koa中介軟體(洋蔥模型)。
一、問題分析
async await是promise的語法糖,await後面跟一個promise,所以上面的程式碼可以寫成:
改成這樣更好理解一些,所以流程控制的核心在於next的實現。next要求呼叫佇列中下一個middleware,當達到最後一個的時候resolve。這樣最後面的promise先resolve,一直到第一個,這樣就是洋蔥模型的順序了。
二、實現
koa-compose的實現是這樣的:
我們把一些引數檢查的非核心邏輯去掉了,實現程式碼就上面那些。每次傳入的next都是呼叫下一個middleware,這樣是一個遞迴的過程,結束條件是最後一個middleware的next是使用者傳入的。
這裡面有一些亮點:
1.這是一種尾遞迴的形式,尾遞迴的特點是最後返回的值是一個遞迴的函式呼叫,這樣執行完就會在呼叫棧中銷燬,不會佔據呼叫棧.
2.返回的是一個Promise.resolve包裝之後的呼叫,而不是同步的呼叫,所以這是一個非同步遞迴,非同步遞迴比同步遞迴的好處是可以被打斷,如果中間有一些優先順序更高的微任務,那麼可以先執行別的微任務
3.compose是函式複合,把n個middleware複合成一個,引數依然是context和next,這種複合之後依然是一個middleware,還可以繼續進行復合。
三、總結
Koa 中介軟體的實現原理,也就是洋蔥模型的實現原理,核心在於next的實現。next需要依次呼叫下一個middleware,當到最後一個的時候結束,這樣後面middleware的promise先resolve,然後直到第一個,這樣的流程也就是洋蔥模型的流程了。
實現的時候還有一些細節,一個是遞迴最好做成尾遞迴的形式,而是用非同步遞迴而不是同步遞迴,第三就是形式上用函式複合的形式,這樣複合之後的中介軟體還可以繼續複合。
已上就是koa中介軟體的實現原理和案例介紹了,相信大家看完之後就能明白了。
本文來自千鋒教育,轉載請註明出處。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31548651/viewspace-2789077/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- redux, koa, express 中介軟體實現對比解析ReduxExpress
- web前端技術分享:使用react實現簡易路由Web前端React路由
- 聊聊 koa 中介軟體
- 如何手寫一款KOA的中介軟體來實現斷點續傳斷點
- 如何在Web前端實現CAD圖文字全文搜尋功能之技術分享Web前端
- Koa 系列 —— Koa 中介軟體機制解析
- 聊聊 Redux 和 Koa 的中介軟體Redux
- KOA2 compose 串聯中介軟體實現(洋蔥模型)模型
- web技術分享| 虛擬列表實現Web
- Redis中介軟體與Web中介軟體RedisWeb
- Web前端是什麼?Web前端包括哪些技術?Web前端
- 如何提升web前端技術?Web前端
- 【Koa】koa-compress中介軟體的使用-壓縮資料
- .Net Core如何優雅的實現中介軟體
- 逐行分析Koa中介軟體機制
- Redux 中介軟體的實現原理Redux
- Web前端技術分享:什麼是塊元素?什麼是行內元素?Web前端
- web前端技術分享:前端開發與後端開發的區別是什麼?Web前端後端
- 好程式設計師web前端技術分享媒體查詢程式設計師Web前端
- web前端技術分享:常用JavaScript框架有哪些?Web前端JavaScript框架
- web前端技術分享Electron之Renderer Process APIWeb前端API
- web前端技術分享Electron之IPC 通訊Web前端
- PHP 框架中介軟體實現PHP框架
- 華為雲技術專家硬核分享,雲原生中介軟體如何加速業務發展
- Express與Koa中介軟體機制分析(二)Express
- 逐行分析Koa v1 中介軟體原理
- Koa日誌中介軟體封裝開發封裝
- Express與Koa中介軟體機制分析(一)Express
- 你知道 koa 中介軟體執行原理嗎?
- Koa2.0原始碼解析-中介軟體的設計原始碼
- 中介軟體是什麼?Linux中介軟體是什麼意思?Linux
- web前端技術分享之頁面元素水平居中Web前端
- 教你如何利用.net core實現反向代理中介軟體的方法
- web技術分享| 快速實現一個呼叫邀請 SDKWeb
- Koa的洋蔥中介軟體,Redux的中介軟體,Axios的攔截器讓你迷惑嗎?實現一個精簡版的就徹底搞懂了。ReduxiOS
- koa2中介軟體koa和koa-compose原始碼分析原理(一)原始碼
- 技術乾貨 | 資料中介軟體如何與GreatSQL資料同步?SQL
- [分散式][訊息中介軟體]訊息中介軟體如何實現每秒幾十萬的高併發寫入分散式