2012-06-27 65 views
2

假設我有這樣的功能(我使用阿卡2.0.2):如何失敗阿卡保證?

def foo(message: String): Future[SomeClass] = 
    for { 
    result <- actor ? message 
    } yield SomeClass(result) 

函數的調用者設置onSuccessonFailure掛鉤的未來,所以如果我想一個演員打破承諾,我讓它發送akka.actor.Status.Failure回發給發件人。這工作得很好。現在,如果我想檢查foo中的某些條件並在條件失敗/成功時返回失敗的未來,該怎麼辦?

def foo(message: String): Future[SomeClass] = 
    if(...) { 
    ...//return failed future 
    } else { 
    for { 
     result <- actor ? message 
    } yield SomeClass(result) 
    } 

'return failed future'block應該是什麼樣子?我是否需要一個執行上下文來實現它?

回答

5

只需返回一個表達式:Promise.failed(new Exception),其中例外是您希望將來失敗的例外。如果您正在使用Scala期貨和Scala standard library from 2.10中的承諾,則不需要執行上下文。

Akka futures and promises要求隱式執行上下文的failed承諾方法。在execution context companion object中應該有一個默認執行上下文,假設您有一個可用的ActorSystem實例,則可以使用該默認執行上下文。