web前端技術分享:koa中介軟體是如何實現的?

千鋒武漢發表於2021-08-27

      在 前端開發過程中我們可能會使用到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中介軟體的實現原理和案例介紹了,相信大家看完之後就能明白了。

      本文來自千鋒教育,轉載請註明出處。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31548651/viewspace-2789077/,如需轉載,請註明出處,否則將追究法律責任。

相關文章