Building rxjs Observable from scratch

剛開始要接觸 rxjs,因為本身技能樹都是點後端居多,前端能閃則閃,連 rx 的官網都還沒看過。不過翻到了一個 rxjs 的 core contributer André Staltztalk。裡頭以 live coding 的方式說明了:

  1. callback 可以是 sync,也可以是 async。
  2. 以 promise 概念說明當資料是以 async 方式得到時,必須以 callback 處理(因為當下資料還沒來)。可以更進一步建立一個 API,以三個 callback 處理所有情況:資料回傳發生錯誤、資料全部取得完畢、下一份資料。把這三個 callback 封裝成 observer 物件。
  3. subscribe 的意思就是 Give Me Data。
  4. 會呼叫 subscribe (Give Me Data) 的人就是 observable
  5. 每個 observable 宣告自己的 subscribe 要做什麼事情。可以是一個 array、可以是 call API 取得資料、也可以是 event。並且會把每個元素(element/event/a chunk of data) 餵給剛才宣告的 "下一份資料 callback" 處理。
  6. array、event、promise、stream 等都可以用 callback 來操作,也都可以用 collection 操作。
  7. 為什麼 rx 沒呼叫 subscribe 就沒有動作呢?因為每個 map、filter 都是一個 observable object,只是包含著許多 methods 的 object,沒有被觸發處理資料(或 event)。
Observable is a way of getting a callback looking thing and making that be a collection.

詳細的實作可以在我的 github 看到,裡面盡量每個 commit 都段落分明,可以依序查看。