scala 所需的未来[[Object1,Object2]]找到单位

fdx2calv  于 8个月前  发布在  Scala
关注(0)|答案(1)|浏览(68)

我在Scala中有一个方法,它将返回Future[Either[SecurityScanResponse, ScanResult]],但是在写了我的逻辑之后,我得到了所需的Future[Either[SecurityScanResponse, ScanResult]],发现了Unit错误。下面是我的实现。

def calculateScore(penalties: Int): Future[Either[FootballScore, CricketScore]] = 
calculatePenalties(penalties).onComplete {
 case Success(penalResponse) => 
    if(penalResponse.valid) {
       findNumberOfMatches().onComplete {
            Future.successful(
                  Left(FootballScore(0, "Valid")))
 }
 case Failure(ex) => 
    log.error("Invalid penalties")
    Future.successful(
                  Left(FootballScore(0, "Invalid")))
  }
 }
}

这只是假设的代码,但我专注于解决发现Unit需要Future[Either[FootballScore, CricketScore]]

qojgxg4l

qojgxg4l1#

如果您查看Future.onComplete的定义,您会看到以下内容

abstract def onComplete[U](f: (Try[T]) => U)(implicit executor: ExecutionContext): Unit

当这个future通过异常或值完成时,应用提供的函数。
如果future已经完成,则将立即应用或异步调度。
注意,f的返回值将被丢弃。
方法onComplete返回一个Unit。这就是为什么你得到这个错误消息。
在文档中有一个Transformation部分,它展示了在Future上应用某些操作的不同方法。根据你所展示的,我认为transformtransformWithmapflatMap将是这种情况下的正确选择。不知道如何重写你的代码,因为它有许多没有定义的功能,而且逻辑也很难理解。如果你提供一个minimal reproducible example我可以编辑我的答案添加一些代码作为例子

相关问题