我正在使用play2.1,我需要一個驗證器來檢查給定的名稱是否已在MongoDB中執行。我使用的反應式MongoDB是一個異步的MongoDB驅動程序,雖然我的問題不依賴於這個庫。Play2中的異步輸入驗證器
一般來說,我想知道 在play framework和scala中使用異步驗證的推薦方法是什麼?
這裏是我的代碼,我不認爲是解決異步驗證的一種優雅的方式:
Reads.verifying[String]{name=>
Await.result(coll.find(Json.obj("name"->name)).one[JsObject].map(_.isEmpty),Duration(1, SECONDS))
}
使用時讀取相同的模式[T]來驗證JsValue
notTaken=new Reads[JsValue]{
def reads(js:JsValue):JsResult[JsValue]={
val oid = js \ "_id"
Await.result(coll.find(Json.obj("_id"->oid)).one[JsObject].map(_.isEmpty),Duration(1, SECONDS)) match {
case true => JsSuccess(js)
case false => JsError("Object Id doesn't exist:"+Json.stringify(oid))
}
}
這代碼的作品,但它看起來不優雅/ scalaish。任何替代方法來解決上述案件。
當用戶存在時,我會有同樣的問題。 http://stackoverflow.com/questions/21709112/scala-async-callback-code-rewriting – sh1ng