scala - promise 的反义词是什么?

标签 scala haskell language-agnostic promise frp

Promise 代表了一个值,该值可能在 future 可用(或未能实现)。

我正在寻找的是一种数据类型,它表示将来可能变得不可用的可用值(可能是由于错误):

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结束后仍然可以访问字段。

最佳答案

简而言之 - 可以使用异步生成器进行建模。
在 DB 连接示例中,从概念上讲,您有一个 DB 连接序列,每次访问值时,您都会从序列(连接)中产生(可能异步)一个值。产生可以是异步的,值本身也可能是异步的。该序列可能会结束(使其不再可用)或者它可能总是产生结果 - 它可能保持未决并且永远不会再次产生另一个连接。
值得一提的是,异步生成器是您所追求的类型的巨大超集——它更具表现力,而不是直接的逆。
在长-逆如何?
你可以用几种不同的方式来反转一个 promise 。
promise 是 单数 时间 setter/getter .那就是它拥有以下内容:

  • 它代表 值(value)。
  • 它的值为时间 (即时间相关)。
  • 这是一个 setter/getter .

  • 引用 Kris 关于 promise 的时间性的工作:

    An observer can subscribe to eventually see the value of a promise. They can do this before or after the promise has a value. Any number of observers can subscribe multiple times and any single observer can subscribe to the same promise multiple times.... Promises are broadcast. The law that no consumer can interfere with another consumer makes it impossible for promises to abort work in progress. A promise represents a result, not the work leading to that result.


    在这些方面, promise 的反面是不同的。
  • 一个 延期是一个奇异的时间 setter 。它是 Promise 的对偶,它允许设置一个值,类似于 Promise 允许获取它的方式。
  • 一个 读者 (通常称为 observable)是 promise 的多个版本,以及 iterable 的时间版本。它代表了暂时到来的多个值。这就像一个可以改变其值(value)的 promise 。
  • 一个 值(value) ,最常用和最原始的东西之一是 Promise 的同步版本。

  • 如果你想要的东西与所有三个 promise 都不一样 - 你需要更高级的东西。一个 发电机 , 在这方面是 promise 的反面,它是一个空间的、多值的 setter。在所有这些方面,这都与 promise 相反。
    但是,您所说的是在这两个方面都是异步的,您想要的是 可用/不可用和更改值 .那是一个异步生成器,这里使用的更复杂的类型之一。
    您的类型需要类似于两次异步的生成器,一次是获取下一个值,一次是获取值本身,我问过 a similar C# question here .这里是 an interesting talk and lecture about it .
    基本上你想要一个生成器,它的值和 next()是异步的。它相当复杂,并且很少有东西可以正确建模(例如 - 滚动和内容都是异步的无限滚动)。
    从某种意义上说,序列结束表示您的值“不再可用”,而生成下一个实例的序列表明您的信号暂时不再可用。
    我也推荐Erik Meijer's talkKris Kowal's GTOR关于这个话题。

    关于scala - promise 的反义词是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26084439/

    相关文章:

    scala - 问超时异常 : on spray-can server stop

    performance - 在haskell中解析二进制文件的性能不佳

    haskell - 使用 Haskell 的随机元素网格

    haskell - 我可以在 stack.yaml 中为 "dummy"省略或指定 'resolver' 值吗

    java - 动态创建 boolean 值列表

    language-agnostic - 编程语言对您来说最重要的属性是什么?

    scala - 是否可以使用单个关键字使 Scala 对象中的所有值变得懒惰

    javascript - 在 AngularJS $scope 中访问 Play Scala 变量

    scala - Spark 中的星期几日期格式字符串 java

    algorithm - 找到一组矩形未触及的点的高效算法