Ber*_*rgi 9 language-agnostic haskell scala frp promise
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>>
Run Code Online (Sandbox Code Playgroud)
是否已经探索过这样一个概念(或类似概念)?是否存在语义或常用习语?
例如,它可能表示将关闭的开放数据库连接.我的特定用例将在FRP中表示"可变",即可变大小的集合式集合,作为此类"结束值"的流 - 当事件发生时,将值添加到集合中,并且当值"结束时" "它被删除了.
我觉得这代表作为Signal<Option<value>>或{data = value, ended = Promise<null>}不完全匹配它-第一种情况不包括保证该值最终稳定到Nothing与第二有data结束之后仍然可以访问域.
在数据库连接例如,在概念上,你已经得到了你每次从序列(连接)来访问你产生价值(可能异步)的值时DB连接的顺序.Yielding可以是异步的,值本身也可能是异步的.序列可能会结束(使其永远不可用)或者它可能总是产生结果 - 它可能保持挂起状态并且永远不会再次产生另一个连接.
值得一提的是,异步生成器是你所追求的类型的巨大超集 - 它更具表现力,而不是直接逆转.
你可以用几种不同的方式反转承诺.
承诺是一种单一的 时间 吸气剂.这就是它具有以下内容:
引用克里斯关于承诺暂时性的工作:
观察者可以订阅最终看到承诺的价值.他们可以在承诺有价值之前或之后做到这一点.任意数量的观察者可以多次订阅,任何一个观察者都可以多次订阅相同的承诺....承诺是广播的.没有消费者可以干涉另一个消费者的法律使得承诺不可能中止正在进行的工作.承诺代表结果,而不是导致结果的工作.
在这些问题中,承诺的反转是不同的.
一个延迟是一个奇异的时间制定者.它是承诺的双重性,它允许设置一个类似于承诺允许获取它的值.
一个阅读器 (通常称为可观察)是一个承诺的多个版本,可迭代的时间版本.它代表了暂时来临的多个价值观.这就像一个可以改变其价值的承诺.
一个值,出最常用的和原始的事情之一是承诺的同步版本.
如果你想要的东西不同于三者中的承诺 - 你需要更先进的东西.在这方面,一个发生器是一个承诺的反转,它是一个空间的多值设定器.这与每一个方面的承诺相反.
然而,你所谈论的是在这两方面都是异步的东西,你想要的东西既可用/不可用又会改变价值.这是一个异步生成器,这是一个比较复杂的类型.
你的类型需要类似于异步两次的生成器,一旦获得下一个值,一次获取值本身,我在这里问了一个类似的C#问题.这是一个有趣的谈话和讲座.
基本上你需要一个其值和 next()异步的生成器.它相当复杂,并且很少有正确建模的东西(例如 - 滚动和内容都是异步的无限滚动).
从某种意义上说,序列结束表示您的值"不再可用",生成下一个实例的序列表示您的信号暂时无法再次获得.
我还推荐Erik Meijer的演讲和Kris Kowal关于这个主题的GTOR.
| 归档时间: |
|
| 查看次数: |
638 次 |
| 最近记录: |