Scala Futures:如何保证非空结果?

假设我有一个返回的方法CompleteableFuture[Data]:


def doIt(): CompleteableFuture[Data] = { ... }

而且,有一个非零的机会doIt()可以返回null。我们如何调用doIt()直到结果不是null不阻塞调用线程?Scala 中的方法是什么?


我目前的尝试:


Future {

  var data: Data = null

  blocking {

    while (data == null) { data = doIt().get }

  }

  data

我不想使用blockingand get。有任何想法吗?


此外,map在此之后还有人呼吁这个 Future:


val myFuture = Future {

  var data: Data = null

  blocking {

    while (data == null) { data = doIt().get }

  }

  data

}.map { d => d.someMember } 

d.someMemberNullPointerException除非我们确保第一个Future具有非空结果,否则将抛出 a 。


翻翻过去那场雪
浏览 118回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java