點燈坊

失くすものさえない今が強くなるチャンスよ

使用 encaseP 將回傳 Promise 的 Function 轉成回傳 Future 的 Function

Sam Xiao's Avatar 2021-07-26

由於 Promise 為 ECMAScript 的標準,實務上會遇到很多回傳 Promise 的 Function,可使用 encaseP 轉成回傳 Future 的 Function。

Version

Fluture 14.0.0

encaseP

import { create, env } from 'sanctuary'
import { encaseP, fork } from 'fluture'
import { env as flutureEnv } from 'fluture-sanctuary-types'
import { log, error } from 'wink-fp'

let { pipe } = create ({ checkTypes: true, env: env.concat (flutureEnv) })

let data = 1

let resolveP = x => Promise.resolve (x)

let resolveF = encaseP (resolveP)

pipe ([
  resolveF,
  fork (error) (log)
]) (data)

第 8 行

let resolveP = x => Promise.resolve (x)

resolveP 為回傳 Promise 的 function。

10 行

let resolveF = encaseP (resolveP)

encaseP 可將回傳 Promise 的 function 轉成回傳 Future 的 function。

encaseP :: (a -> Promise e r) -> a -> Future e r
將回傳 Promise 的 function 轉成回傳 Future 的 function

a -> Promise e r:回傳 Promise 的 function

a -> Future e r:回傳 Future 的 function

12 行

pipe ([
  resolveF,
  fork (error) (log)
]) (data)

使用 pipe 組合 IIFE:

  • resolveF:回傳 Future 的 function
  • fork (error) (log):解開 Future

encasep000

Conclusion

  • Fluture 的 function 中以 P 結尾都跟 Promise 有關
  • 不用擔心原本一堆 function 都回傳 Promise,只要使用 encaseP 就可轉成回傳 Future 的 function

Reference

Fluture, encaseP