Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Play Framework java Promise转换为Play Framework Scala Promise_Java_Scala_Playframework_Promise - Fatal编程技术网

将Play Framework java Promise转换为Play Framework Scala Promise

将Play Framework java Promise转换为Play Framework Scala Promise,java,scala,playframework,promise,Java,Scala,Playframework,Promise,我目前正在构建一个Scala play框架应用程序,它使用一个库,返回结果作为F.Promise(Java Promise)。有没有一种方法可以将F.Promises()转换为Scala承诺,或者从F.Promise中获得包装好的Scala未来 到目前为止,我看到的唯一方法是得到F.Promise,但这是一个阻塞操作,我希望继续异步工作 第一个答案中描述的方式引导我找到了这段代码。不幸的是,我不知道如何正确定义这个F函数。代码不编译 答复: 因此,我最终发现F.Promise有一个名为wrapp

我目前正在构建一个Scala play框架应用程序,它使用一个库,返回结果作为F.Promise(Java Promise)。有没有一种方法可以将F.Promises()转换为Scala承诺,或者从F.Promise中获得包装好的Scala未来

到目前为止,我看到的唯一方法是得到F.Promise,但这是一个阻塞操作,我希望继续异步工作

第一个答案中描述的方式引导我找到了这段代码。不幸的是,我不知道如何正确定义这个F函数。代码不编译

答复:
因此,我最终发现F.Promise有一个名为wrapped()的方法。这个方法可以让你找回Scala的未来。

好吧,因为这个生态系统中没有承诺或未来的“标准”,所以你必须手动完成。在play承诺和scala期货之间没有“同化”的概念

基本上,我们对待一个
F.Promise
就像对待一个回调一样,我们通过创建一个Promise(在scala中,Promise的意思是“创建未来的东西”)将它转换为scala未来。以下是对其工作原理的描述,而不是代码,因为我认为这样可以更好地解释原理:

  • 创建一个新的
    Promise[T]
    -p
  • 调用
    F.Promise上的
    map
    ,在传递给它的
    F.Function
    中,使用Promise的值调用
    p success
    ,有效地解决承诺
  • 类似地,在promise上调用
    .recover
    ,并在其处理程序调用
    p failure
    中调用失败原因
  • Return
    p.future
    ,这是一个表示值
    p
    的future,用-因为我们反映了成功和失败通道,这将起作用

这与您将其他任何东西转换为scala未来的方式没有什么不同。向另一个方向转换也有类似的效果。

好吧,因为这个生态系统中没有承诺或未来的“标准”,所以你必须手动进行转换。在play承诺和scala期货之间没有“同化”的概念

基本上,我们对待一个
F.Promise
就像对待一个回调一样,我们通过创建一个Promise(在scala中,Promise的意思是“创建未来的东西”)将它转换为scala未来。以下是对其工作原理的描述,而不是代码,因为我认为这样可以更好地解释原理:

  • 创建一个新的
    Promise[T]
    -p
  • 调用
    F.Promise上的
    map
    ,在传递给它的
    F.Function
    中,使用Promise的值调用
    p success
    ,有效地解决承诺
  • 类似地,在promise上调用
    .recover
    ,并在其处理程序调用
    p failure
    中调用失败原因
  • Return
    p.future
    ,这是一个表示值
    p
    的future,用-因为我们反映了成功和失败通道,这将起作用

这与您将其他任何东西转换为scala未来的方式没有什么不同。向另一个方向转换的效果类似。

事实证明,类F.Promise(java.play)有一个名为
wrapped()
的方法,该方法返回由Promise包装的
scala.concurrente.Future
。所以你所要做的就是打电话给F

val promise: F.Promise[T] = getPromise()
val future : Future[T] = promise.wrapped()

事实证明,类F.Promise(java.play)有一个名为
wrapped()
的方法,它返回由Promise包装的
scala.concurrente.Future
。所以你所要做的就是打电话给F

val promise: F.Promise[T] = getPromise()
val future : Future[T] = promise.wrapped()

我不确定我是否能完全理解你,但我会尝试把它转化为代码。谢谢你的快速回复answer@MeiSign我的目标是让你了解我们在做什么以及为什么-我正在尝试回答解决方案的步骤,而不是解决方案本身,因为我认为这可能更有成效-如果你被卡住了,请让我知道,我将尝试澄清。我想我理解你的想法,但我正在努力解决将F.函数传递给javamap函数。你能帮我做那部分吗?以下是我到目前为止所做的:推送,因为我认为你没有收到任何评论通知,因为我删除了第一条评论。我不确定我是否能完全理解你,但我会尝试将其转化为代码。谢谢你的快速回复answer@MeiSign我的目标是让你了解我们在做什么以及为什么-我正在尝试回答解决方案的步骤,而不是解决方案本身,因为我认为这可能更有成效-如果你被卡住了,请让我知道,我将尝试澄清。我想我理解你的想法,但我正在努力解决将F.函数传递给javamap函数。你能帮我做那部分吗?以下是我到目前为止所做的:推送,因为我认为你没有收到评论通知,因为我删除了第一条评论。如果你能在这里更详细地解释一下你所做的事情,那就太好了。添加了更多的解释。:)如果你能在这里更详细地解释一下你所做的事情,那就太好了