Rxjs Observable.pipe 传入多个 operators 的执行逻辑分析
生活随笔
收集整理的這篇文章主要介紹了
Rxjs Observable.pipe 传入多个 operators 的执行逻辑分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
測試代碼:
fromEvent(this.test, 'click').pipe(map( event => event.timeStamp), mapTo(1)).subscribe((event) => console.log(event));pipe 操作的兩個輸入操作:
輸入參數為數組,包含兩個元素:
使用原始的 Observable 作為輸入,執行這兩個操作:
數組的 reduce 是一個原生方法:
下面這段代碼,介紹了 reduce 的用法:
<html> <script>var a = [1,2,3,4];function fn(pre, cur, index, arr){console.log(`previous: ${pre}, cur: ${cur},index: ${index}, whole arr: ${arr}`);return pre + cur; }console.log(a.reduce( fn, 0));</script> </html>reduce 接受兩個參數,第一個參數是一個函數,該函數接收 4 個輸入參數,previous,current,index 和 array:
- previous:前一輪 reduce 迭代值,如果第一輪,則該值為第二個參數,即初始值
- current:當前這輪的 reduce 迭代值。例如,array 元素為1,2,3,4,則 reduce 每輪迭代,current 值分別為1,2,3,4
- index:迭代的索引值
- array:調用 reduce 的原始數組,配合前一個 index 參數,能訪問整個數組的內容
在實際使用過程中,previous 和 current 這兩個參數用的最多。
回到 pipeFromArray 的實現。
reduce 第一輪迭代:
prev 是 input 傳入的初始值,fn 是輸入 fns 數組的第一個元素。即第一個 map 返回的 operator:
這里不會執行具體的 map 操作,而是返回一個新的 Observable 對象,作為第二輪 reduce 迭代的輸入:
lift 方法就是返回新的 Observable 對象:
mapTo 的實現:
經過 pipe 處理過的 Observable,最后應用程序訂閱的,就是這個最終版的 Observable:
更多Jerry的原創文章,盡在:“汪子熙”:
總結
以上是生活随笔為你收集整理的Rxjs Observable.pipe 传入多个 operators 的执行逻辑分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上海主要地标经纬度「建议收藏」(上海市人
- 下一篇: Rxjs 里 subscribeToAr