點燈坊

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

使用 cancel 取消 Future

Sam Xiao's Avatar 2021-06-29

使用 Future 所建立的 Future 包含 cancel,若遇到執行時間很長的 Future,可自行使用 setTimeout 取消。

Version

Fluture 14.0.0

Future

import { Future, value } from 'fluture'
import { log } from 'wink-fp'

let data = Future((rej, res) => {
  let t = setTimeout(res, 4000, 1)
  return () => clearTimeout(t)
})

let cancel = value (log) (data)

setTimeout (cancel, 3000)

第 4 行

let data = Future((rej, res) => {
  let t = setTimeout(res, 4000, 1)
  return () => clearTimeout(t)
})

使用 Future 建立 4 秒後執行的 Future,,並且回傳 function 提供 cancel 使用。

第 9 行

let cancel = value (log) (data)

使用 value 讀取 Future 內部值,並且回傳 cancel

11 行

setTimeout (cancel, 3000)

若 Future 大於 3 秒後才回傳,則會被 setTimeout 執行 cancel 而取消,若小於 3 秒則正常執行 Future。

cancel000

after

import { after, value } from 'fluture'
import { log } from 'wink-fp'

let data = after (4000) (1)

let cancel = value (log) (data)

setTimeout (cancel, 3000)

第 4 行

let data = after (4000) (1)

也可使用 after 直接建立 4 秒後執行的 Future,已經內建回傳 cancel

cancel001

Conclusion

  • 可配合 setTimeout 取消 Future,這是 Promise 做不到的

Reference

Aldwin Vlasbolm, Functional Alternative to Promises
Future, after