在 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(...)
}
我有一个现有代码 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(...)
}