【发布时间】:2014-11-22 22:24:07
【问题描述】:
promise 表示将来可能可用(或不可用)的值。
我正在寻找的是一种数据类型,它表示将来可能变得不可用(可能由于错误)的可用值:
Promise a b = TransitionFromTo<PENDING, Either<value a, error b>>
??? a = TransitionFromTo<value a, Either<ENDED, FAILED>> or
??? a b = TransitionFromTo<value a, Either<ENDED, error b>>
是否已经探索过这样的概念(或类似概念)?有没有现成的语义或常用习语?
例如,它可能表示将关闭的打开的数据库连接。我的特定用例将表示一个“可变”,即 FRP 中的可变大小、类似集合的集合作为此类“结束值”的流——当事件发生时,值被添加到集合中,当值“结束”时" 它被删除了。
我觉得将其表示为 Signal<Option<value>> 或 {data = value, ended = Promise<null>} 并不完全匹配 - 第一种情况不包括保证值最终稳定为 Nothing 而第二种情况有 data字段结束后仍可访问。
【问题讨论】:
-
您关闭数据库连接的用例似乎只是另一个未来价值(重要的不是价值,而是实现的事实)所以为什么不能用常规旧的来表示承诺?
-
@torazaburo:是的,这就是我对
{data = value, ended = Promise<null>}的意思(事实上,这就是我目前实现它的方式)。但是,感觉不对,因为data- 连接 - 始终可以访问,并且因为 promise 不代表值。 -
我远不是任何类型的 Promise 专家,但在我看来,Promise 不需要 具有值,实际上通常会忽略该值。值不能被认为是一种细节,关于分辨率的附加信息吗?对我来说,忽略值的承诺没有任何代码气味。
-
@torazaburo:是的,没错,有一些用例忽略了价值,只是对时间链感兴趣;对于这些有时会创建不具有价值的承诺。这可能确实用于该类型的实现,但目前我正在寻找这种(抽象)数据结构的名称,它也带有“结算前”值。
-
首先想到的是弱引用,它可以用来访问一个值,直到不能再访问为止。
标签: scala haskell language-agnostic promise frp