- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读以下页面上关于 futures 和 fallbackTo 的使用:
而且我没有看到我期望的行为。
我有以下测试(取自页面并稍作修改):
import scala.concurrent._
import scala.util._
import ExecutionContext.Implicits.global
val usdQuote = future {
sys.error("1")
"20.0"
} map {
usd => "Value: " + usd + "$"
}
val chfQuote = future {
sys.error("2")
"15.0"
} map {
chf => "Value: " + chf + "CHF"
}
val anyQuote = usdQuote fallbackTo chfQuote
anyQuote onSuccess { case s => println(s) }
anyQuote onFailure { case t => println("error ... " + t) }
我一直在尝试对报价 future 中的 sys.error() 调用进行注释/取消注释。没有 sys.error 的结果是“Value: 20$”。启用第一个 sys.error() 会给我“值:15CHF”。到目前为止一切顺利,但是当我启用第二个 sys.error() 时,据我所知,它应该给我第一个 future 的异常(exception),即“错误 ... 1”,但它给了我“错误 .. . 2".
谁能解释一下我做错了什么?
谢谢,马克。
最佳答案
文档似乎与实现不一致。
我从 scala v2.10.3 中获取了这些片段
// In Future.scala
def fallbackTo[U](that: Future[U]): Future[U] = {
val p = Promise[U]()
onComplete {
case s @ Success(_) => p complete s // first future succeeded
case _ => p completeWith that // first future failed, complete promise with second
}
p.future
}
// In Promise.scala
final def completeWith(other: Future[T]): this.type = {
other onComplete { this complete _ } // complete the promise with second future's result
this
}
我们可以看到, promise 在第一个 future 的成功或第二个 future 的成功/失败时完成。
所以如果两个 future 都失败了,我们就会得到第二个 future 的失败。
关于scala future 和 fallbackTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20303282/
我正在阅读以下页面上关于 futures 和 fallbackTo 的使用: scala docs on futures 而且我没有看到我期望的行为。 我有以下测试(取自页面并稍作修改): impor
鉴于此代码 val f1: Future[Int] = Future { 5 } //Future.failed(new Exception("sorry")) val f2: Future[Int]
我是一名优秀的程序员,十分优秀!