【譯】2分鐘介紹Rx

原文地址:https://medium.com/@andrestaltz/2-minute-introduction-to-rx-24c8ca793877
翻譯去掉了一些口水話(⊙o⊙)javascript

諸位應該已經讀過個人前端時間寫過的入門教程了。太長不看?好吧。Rx沒那麼難,你能夠本身實現一遍。
這裏有一個數組:html

[14, 9, 5, 2, 10, 13, 4]

假設這是一個immutable(不可變)的數組,你須要去除全部的奇數,你會怎麼作?這裏有一個流行的辦法:前端

[14, 9, 5, 2, 10, 13, 4]
filter((x) -> x%2 == 0)
[14, 2, 10, 4]

到目前爲止,沒有什麼新概念。這個過濾方法在underscore.js, ECMAScript 5.1, LINQ, Guava等中都有提供。
————分割線————————
如今來思考一下點擊事件,每次點擊,記錄對應的位置信息。把它們繪製到時間線上,將會以下圖所示。
圖片來自於medium
這個,一系列的事件流,別稱就是「Observable」。
鼠標觸發了點擊事件,因此事件流一直是不可變的,這個情境下,一旦產生這個事件,沒法添加或者刪除它。
可是若是我只對x<250的事件感興趣,咱們不能就想過濾數組同樣,新建一個過濾流嗎?java

filter( (event) -> event.x < 250 )

就以下圖所示:
圖片來自於medium
如今再看不可變數組和Observables,它們之間沒有那麼多不一樣。這二者,你均可以map,filter,reduce。對於Observables,你還能使用merge,delay,concat,buffer,distinct,first,last,zip,startWith,window,takeUntil,skup,scan,sample,amb,join,flatMap。
具體看這裏:方法彙總-中文文檔
把Observalbes當作是一個異步不可變數組便可。
Rx之於事件,就像是underscore.js之於數組。等一下,什麼是事件?在你的應用中,還有什麼能夠被稱爲一個事件?
事件"application started", 事件"API response arrived", 事件 "keyboard key pressed", 事件 "invalidateLayout()", 事件 "device slept", 等等。
事實上,幾乎全部事件都能被看作是事件流,剩下的事情就是正確的排列組合它們。
(完)git

相關文章
相關標籤/搜索