由於 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 的 functionfork (error) (log)
:解開 Future
Conclusion
- Fluture 的 function 中以
P
結尾都跟 Promise 有關 - 不用擔心原本一堆 function 都回傳 Promise,只要使用
encaseP
就可轉成回傳 Future 的 function