在 Scala Future 的 onComplete 中构造实例

Constructing instance inside Scala Future's onComplete

我有一个现有代码 returns 某种类型的实例。

def myMethod(inputs) = {
   .....some calculations

   MyInstance(....)
}

我现在必须对其进行更改。 Change 调用一些服务 returns 某个值的 Future,我需要用它来更新 MyInstance。

def myMethod(inputs) = {
   .....some calculations

  val futureWithSomeValue = someexternalservice.getData(....)
  
  futureWithSomeValue.onComplete {
    case Success(value) => ....create MyInstance
    case Failure    => ....throw error
  }
}

但是 onComplete returns 单元,因此它破坏了代码。

在不更改方法签名的情况下最好的方法是什么?

如果myMethod调用Future那么myMethod必须return调用Future

因此,正如评论中所说,您可能宁愿使用 map 而不是 onComplete 来为您的实例生成一个新的 Future 和 return 。

def myMethod(inputs): Future[MyInstance] = {
   // some calculations.

  val futureWithSomeValue = someexternalservice.getData(....)
  
  futureWithSomeValue.map { value =>
    MyInstance(...)
  }