【发布时间】:2016-11-08 09:39:55
【问题描述】:
我正在做这样的事情:
(for {
data <- Future(getData)
updated = makeChanges(data) if updated != data
_ <- Future(saveUpdates(updated))
_ <- Future(recordTransaction)
} yield ()).recover { case e: NoSuchElementException => () }
当过滤器不满意时,它会通过抛出异常(不好)跳过剩余的两个步骤(好!),我必须在最后捕获并处理。使用异常进行流控制对我来说并不太优雅,我想知道是否有更好的方法来做到这一点,除了显而易见的 - 用 if 语句包装所有剩余的行:
_ <- if(updated != data) Future(saveUpdates(updated)) else Future.successful(())
_ <- if(updated != data) ...
【问题讨论】:
-
如果您可以更改 makeChanges 以返回 (changed:Boolean, updated:Data) 的元组,您可以对其进行模式匹配并决定在哪种情况下采取哪种操作。它会让它更干净
-
@LouisF。不明白你的意思。我可以很容易地在
updated != data上进行模式匹配,但不知道如何使用它来使其更干净。将最后一段中的if ... else ..替换为match ... case?
标签: scala future for-comprehension