快速的問題,如果在斯卡拉你成功承諾這樣的承諾,斯卡拉諾言澄清
val successful = Promise[List[T]]() //Create a promise which will be returning the results
successful.success(Nil)
這會不會完成承諾,因此不會允許您進一步寫入承諾?哪些還會觸發onComplete回調的承諾?
我問的原因是我想了解下面的一段代碼,我試圖理解爲什麼在未來的計算開始之前,這個承諾被初始化爲零。
def all[T](fs: List[Future[T]]): Future[List[T]] = {
val successful = Promise[List[T]]() //Create a promise which will be returning the results
successful.success(Nil) //Initialize the profile
fs.foldRight(successful.future) { //Create the Aggregate for the fold right which will be an empty future
//for each element extract the element from the future and append to our aggregate
//f -> Future[T] acc -> Future[List[T]]
(f, acc) => for { x <- f; xs <- acc } yield x :: xs
}
}
思考出來大聲我要說完成承諾的原因是,有沒有callbacsk連接,因此,當它成功,我們不關心。如果是這樣,唯一的原因是使用承諾就是利用它的未來。那麼,如果不使用我們實際上不需要的承諾,它們就不是一種更簡單/更簡潔的方式來定義未來?
在這種情況下,它需要處理'fs'爲空的情況。 – Ryan 2014-12-02 19:03:05
所以我們假設fs不爲null。由於之前的成功,foldright會觸發onComplete回調嗎? – MrX 2014-12-02 19:06:55
沒有調用'onComplete'來註冊回調。 – vptheron 2014-12-02 19:20:15