正在阅读本文article关于 promise ,作者使用了以下示例:
def redeemCampaignPledge(): Future[TaxCut] = {
val p = Promise[TaxCut]()
Future {
println("Starting the new legislative period.")
Thread.sleep(2000)
//p.success(TaxCut(20))
//println("We reduced the taxes! You must reelect us 2018!")
p.failure(LameExcuse("global economy crisis"))
println("We didn't fullfil our promises, so what?")
}
p.future
}
val taxCutF: Future[TaxCut] = redeemCampaignPledge()
println("Now they're elected, let's see if they remember their promise.")
taxCutF.onComplete {
case Success(TaxCut(reduction)) =>
println(s"Miracle! Taxes cut by $reduction percent.")
case Failure(ex) =>
println(s"They broke the promise again. Because of a ${ex.getMessage}")
}
我的问题是,我不能去掉 Promise 并将其重写为:
def redeem(): Future[TaxCut] = Future {
println("Starting legislative period...!!!!")
Thread.sleep(2000)
println("We were successful")
TaxCut(25)
}
第二个版本缺少什么?我没有完全理解 promise 带来的值(value)。
最佳答案
是的,你完全正确。这是一个非常common anti pattern使用 JavaScript Promises(其中,Futures 称为 Promises,Promises 称为 deferred)。
基本上,它不是使用 future 提供的延续,而是以类似时尚的回调方式围绕它们构建新的延续。
关于scala - 什么时候不能用 Future 代替 Promise?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22844109/