點燈坊

學而時習之,不亦悅乎

Tag : Ramda

使用 otherwise() 處理 Rejected Promise

ECMAScript 2015 提供了 catch() 處理 Rejected Promise,而 2017 更提供了 try catch 直接在 catch Block 處理;事實上 Ramda 也提供了 otherwise(),讓我們以更 Functional 方式處理 Rejected Promise。

使用 then() 處理 Fulfilled Promise

ECMAScript 2015 的最大亮點之一就是提出 Promise 這種 未來值 概念避免 Callback Hell,但仍看到很多人以 Callback 使用 Promise,事實上可用更 Functional 方式處理。

使用 propOr() 提供預設值取的 Object 的 Property

實務上我們常需要讀取 Object 的 Property,但我們並不確定 Object 是否有該 Property,最嚴謹的做法必須先檢查 Property 是否存在才能讀取,否則在 Runtime 可能會得到 Cannot read property xxx of undefined 的錯誤訊息。

使用 is() 判斷 Type

ECMAScript 雖然有提供 instanceof,但其為 Operator,因此無法達成 Fuction Composition,而 Ramda 的 is() 正是 instanceof 的 function 版本。

使用 ifElse() 讓 Pipeline 不中斷

寫程式免不了要使用 if else 判斷,但 if else 是 Imperative 產物,這種寫法會使得 Pipeline 中斷而無法 Compose Function,所幸 Ramda 亦提供 ifElse(),使我們續 Pipeline。

使用 evolve() 只改變 Object 的 Value

實務上在使用 map() 時,經常是 Object 的 Key 不變,但 Value 稍作加工,此時當然可以使用 Map Function 處理,但也可使用 Ramda 的 evlove() 使 Map Function 也 Point-free。