2015-04-16 83 views
1

當我有下面的代碼一切都編譯好。重載的方法值異步與替代方案:

def create(name: String, age: Int) = Action.async { 
    val json = Json.obj(
     "name" -> name, 
     "age" -> age, 
     "created" -> new java.util.Date().getTime()) 

    collection.insert(json).map(lastError => 
     Ok("Mongo LastError: %s".format(lastError))) 
    } 

但當提取物的含量,以另一種方法如下

def create(name: String, age: Int) = Action.async { 
    createPerson(name,age) 
} 

    def createPerson(name: String, age: Int) = Action.async { 
    val json = Json.obj(
     "name" -> name, 
     "age" -> age, 
     "created" -> new java.util.Date().getTime()) 

    collection.insert(json).map(lastError => 
     Ok("Mongo LastError: %s".format(lastError))) 
    } 

它給人的錯誤

[error] /media/pubudu/NTFSPartition/projects/catnet/data-collector-backend/app/controllers/Application.scala:50: overloaded method value async with alternatives: 
[error] [A](bodyParser: play.api.mvc.BodyParser[A])(block: play.api.mvc.Request[A] => scala.concurrent.Future[play.api.mvc.Result])play.api.mvc.Action[A] <and> 
[error] (block: play.api.mvc.Request[play.api.mvc.AnyContent] => scala.concurrent.Future[play.api.mvc.Result])play.api.mvc.Action[play.api.mvc.AnyContent] <and> 
[error] (block: => scala.concurrent.Future[play.api.mvc.Result])play.api.mvc.Action[play.api.mvc.AnyContent] 
[error] cannot be applied to (play.api.mvc.Action[play.api.mvc.AnyContent]) 
[error] def create(name: String, age: Int) = Action.async { 

是不是這兩個代碼段做同樣的事情?如果不是,我如何提取方法的內容而不會出現錯誤?我想要做的是從兩個不同的地方調用提取的方法。

+1

沒有,創建方法期望回報是結果,但你調用這個函數有返回操作[AnyContent] – curious

+0

@curious謝謝,如果另一個動作你可以做出答案,我可以接受它。 –

+0

我已經在更多的解釋它。檢查一下。 – curious

回答

3

create方法預計返回類型爲Future[Result],但呼叫createPerson返回Action[AnyContent]。您可以通過以下更改更正:

def create(name: String, age: Int) = Action.async { 
    createPerson(name,age).map(lastError => 
     Ok("Mongo LastError: %s".format(lastError))) 
} 

    def createPerson(name: String, age: Int):Future[String] = { 
    val json = Json.obj(
     "name" -> name, 
     "age" -> age, 
     "created" -> new java.util.Date().getTime()) 

    collection.insert(json) 
    }