使用 parallel 將 Array Future 轉成 Future Array
若使用 map
將 Array 與回傳 Future 的 Function 綁定後,就會產生 Array Future,可使用 parallel
將 Array Future 轉成 Future Array,最後再從 Future 取出 Array。
失くすものさえない今が強くなるチャンスよ
若使用 map
將 Array 與回傳 Future 的 Function 綁定後,就會產生 Array Future,可使用 parallel
將 Array Future 轉成 Future Array,最後再從 Future 取出 Array。
Future Either Maybe 為常見的 Monad Stack,如呼叫 API 回傳 Future,再使用回傳 Either 的 Function 判斷 API 回傳值,又使用回傳 Maybe 的 Function 運算,就會出現 Future Either Maybe。
Fluture 也提供 ap
,是以 Function 為主體,跟 Sanctuary 以 Data 為主體的考量不太一樣,其 Type Signature 剛好相反。
由於 Promise 為 ECMAScript 的標準,實務上會遇到很多回傳 Promise 的 Function,可使用 encaseP
轉成回傳 Future 的 Function。
Axios 為目前 Frontend 最流行的 HTTP Client,回傳為 Promise,可藉由 attemptP
或 encaseP
改回傳 Future。
fetch
為 Browser 內建的 HTTP Client 能回傳 Promise,可藉由 encaseP
加以改造回傳 Future。
雖然沒有 HTTP Client 回傳 Future,但只要有 HTTP Client 能回傳 Promise,就可透過 attemptP
回傳 Future。
若先有 Function 回傳 Maybe,再根據 Maybe 內的 Value 呼叫 API,就會出現 Maybe Future。
Future Maybe 為常見的 Monad Stack,如呼叫 API 回傳 Future,再使用回傳 Maybe 的 function 改變 API 回傳值,就會出現 Future Maybe。
mapRej
與 chainRej
都可處理 Rejected,唯傳入 mapRej
為一般 Function,而傳入 chainRej
為回傳 Future 的 Function。
若要以 Function Pipeline 處理 Rejected,可使用多個 mapRej
,不像 Promise 只能使用一個 otherwise
。
若要以 Function Pipeline 處理 Resolved,可使用多個 chain
,如同 Promise 可使用多個 then
,唯 chain
只接受回傳 Future 的 Function。
一般我們所寫的 Function 都只能回傳 ECMAScript 的原生 Type,而無法回傳 Future 這類 Monadic Type,透過 encase
可將一般 function 轉成成能回傳 Future 的 Function。
若要以 Function Pipeline 處理 Resolved,可使用多個 map
,如同 Promise 可使用多個 then
。
若想將 API 回傳 Object 的 Property 寫入多個 State,可使用 ap
平行寫入。
若想將 API 回傳 Value 寫入多個 State,可使用 ap
平行寫入。
若想對 Future 執行類似 ECMAScript 的 ||
判斷,可使用 alt
。
若想對 Future 執行類似 ECMAScript 的 &&
判斷,可使用 and
。
若要以 Function Pipeline 同時處理 Resolved 與 Rejected,可使用 coalesce
,尤其將 Future 轉成 Maybe 或 Either 時特別好用。
使用 Future
所建立的 Future 包含 cancel
,若遇到執行時間很長的 Future,可自行使用 setTimeout
取消。
雖然可用 Future
建立完整的 Cancellable Future,但若想快速建立 Resolved Future,可直接使用 resolve
。
若要建立完整 Cancellable Future,可使用 Future
建立。
Promise 很像 Monad 但又不是 Monad,Monad 應該統一使用 map
與 chain
,但 Promise 卻使用自己的 then
,而 Future 則符合 Fantasy Land 規格,用法與觀念也與 Maybe 與 Either 相同。
由於 Fluture 遵循 Fantasy Land 規格,因此也可搭配 Sanctuary 使用,但由於 Sanctuary 不認識 Future,因此 Type Checking 會失敗,Fluture 已經提供 fluture-sanctuary-types
,可使 Sanctuary 認識 Future。
一般我們所寫的 Function 都只能處理 ECMAScript 的原生 Type,而無法處理 Maybe、Either、Future 這類 Monadic Type,透過 lift2
可將普通 Binary Function 提升成能處理 Apply 的 Function。
當有 Function 回傳 Either,而後續的 Function 都在 Either 內執行時,卻又有 Function 回傳 Future,這就造成 Either 內有 Future 窘境,實務上該如何處理這種兩層 Monad 呢 ?
實務上常遇到須先呼叫第一個 API 取得 id
後,才能以該 id
呼叫第二個 API 取得資料,這種相依性的 API 該如何處理呢 ?
RESTful API 除了回傳 200
HTTP Status 與內容外,也會回傳 Error Response 與 Data,Vue 該如何正確處理呢 ?
有些資料會不斷變動,實務上會要求以 Polling 方式不斷呼叫 API 回傳資料。
實務上常遇到 API 需要以 POST 以 Body 傳入,傳統會使用 Promise 處理,事實上 Future 更適合 Point-free。
處理 RESTful API 的 GET 回傳 Array Object 在實務上一定會碰到,傳統會使用 Promise 處理,事實上 Future 更適合 Point-free。
處理 RESTful API 的 GET 回傳 Primitive 在實務上一定會碰到,傳統會使用 Promise 處理,事實上 Future 更適合 Point-free。