promise

(promise)

试验版本,将来可能会出现改动。

返回一个 promise 对象,可以使用 deref 或者 @ 读取它的值,也可以使用 deliver 对它进行只能设置一次的赋值。

如果 promise 对象在使用 deliver 设置值之前,就被 deref 或者 @ 读取,那么调用者将被阻塞,直到 promise 对象有值,或者 deref 设置的超时时间到期为止。

deliver 设置值之后,对 promise 的每次 deref 或者 @ 都会不阻塞地返回 deliver 所设置的值。

查看源码

user=> (def p (promise))
#'user/p

user=> p
#<core$promise$reify__6153@bfb588: :pending>

; 对未有值的 promise 进行 deref
; 为了避免陷入无限阻塞,设置 5 秒的超时时间

user=> (deref p 5000 "reach timeout")
"reach timeout"

; 为 promise 设置值

user=> (deliver p 10086)
#<core$promise$reify__6153@bfb588: 10086>

user=> @p
10086

user=> p
#<core$promise$reify__6153@bfb588: 10086>

; 试试重复 deliver ?

user=> (deliver p 123123)
nil

user=> @p
10086

讨论

comments powered by Disqus

Previous topic

pmap

Next topic

pvalues