斯卡拉:承诺是多余的?

一个相关的问题:为什么我们需要未来和承诺?

如果我理解Scala Future / Promise API是正确的,那么Future和Promise在它们之间有一对一的关系,并且可以从承诺转到相应的未来,但反之亦然。

在迄今为止我看到的代码示例中,Promise可能会被(异步)任务实现者使用,但是最终返回给客户端的是相应的Future来读取结果。

这是有道理的,因为作为任务实施者,我不想让客户端能够将任务设置为完成,只有在完成时才读取其结果。

所以Promise经常被描述为必不可少的,因为任务执行者是更新/写入任务结果的方式(一次),而Future则是客户端读取结果的方式。

我明白为什么Promise可能是有用的或“可以拥有”作为Future的内部实现细节。

但是将Promise作为一个公共API暴露给开发者实际上是必不可少的吗? 作为一名任务执行者,我可以通过Future.apply简单地创建所需的Future,而无需Promise API。

在我传递给Future.apply的代码块中,我可以决定返回什么样的成功结果,以及何时抛出异常。 这相当于我可以用Promise做什么。

在我看来,最初只有像Promise这样的东西,还有一个额外的能力来查询已经委托给Future的已完成结果(值/异常)的Promise。 只有后来的Future被添加到API中,但由于某种原因Promise被暴露。

所以我的问题是,在Promise中有什么必不可少的东西是未来能做到的,还是Promise是多余的?

注意:我不是在问Promise and Future是否是两个不同的概念,证明不同的实体是合理的。 我在问是否Promise提供了一个单独的未来无法实现的实践能力。


让我们试试这个...

Promise允许根据外部事件/触发器完成Future

想象一下,您正在使用您发布订单的服务,这些订单需要很长时间才能执行,因此您只会在稍后获得反馈(执行结果)。

你将如何处理与Future ? 你需要不断地查询结果(来自Future.apply主体)。

使用Promise ,您可以等待服务完成后触发回调。 当触发事件发生时,您可以使用Promise来完成Future 。 您从Future.apply主体之外完成Future ,这就是我以上所说的外部事件/触发器。

换句话说, Promise是一种从外部完成Future的安全方法,没有其他方法可以做到: Promise API是必不可少的。


您可以将Promise传递给代码的其他部分,并允许它在需要时以及如何完成Future

作为一名任务执行者,我可以通过Future.apply简单地创建所需的Future,而无需Promise API。

你可能只是想创造Future 。 但其他人需要编写与Future的函数,并且他们需要Promise

链接地址: http://www.djcxy.com/p/55433.html

上一篇: Scala: Is Promise redundant?

下一篇: Deferred promise or similar pattern that can be reset