Home > Back-end >  Constructing instance inside Scala Future's onComplete
Constructing instance inside Scala Future's onComplete

Time:01-29

I have an existing code which returns an instance of certain type.

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

   MyInstance(....)
}

I have to make a change in it now. Change calls some service which returns a Future of some value, which I need to use to update MyInstance.

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

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

But onComplete returns Unit, and hence it breaks the code.

What is best way to do it without changing method signature?

CodePudding user response:

If myMethod call a Future then myMethod must return a Future

Thus, as was said in the comments, you may rather use map instead of onComplete to produce a new Future with your instance and return that.

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

  val futureWithSomeValue = someexternalservice.getData(....)
  
  futureWithSomeValue.map { value =>
    MyInstance(...)
  }
  •  Tags:  
  • Related