2016-06-27 7 views
0

私はPlayアプリを持っている、と私は、自分で独自性の検証の種類を実装したい、私はSlickを使用するので、そのcountは私case class objectにエラーを設定するゼロ以上であれば、私はシンプルなsum(1) where呼び出しを行うと、当然です。だから私は、現時点でエラーを正しく設定する必要があるので、Await.resultをDBクエリで回避する回避策を想像することはできません。Await.resultを避けるには?

しかし、今私はAwait.resultは本当に悪い練習、任意の提案ですか?

答えて

2

あなたは将来にマップを使用する必要があります。この場合

db.run(query.result) map { response => 
    //do whatever you want with the response 
} 

をあなたが応答を取得しますが、それはAwait.resultとされてブロックされていません。あなたがあなたのコメントに示したコードのために、それは次のようになりますので:

編集

def exists(tableName: String, column: String, value: Any): Future[Boolean] = { 
    val query = dbConfig.db.run(sql"SELECT COUNT(1) from #$tableName WHERE #$column = ${value.toString};".as[Int]) 

    query.map(_.sum > 0) 
} 

次にあなたがexistsを呼び出す必要がどこに

exists(...) map  { result => 
if (result == true) 
    //doSomething 
} 
+0

てください、はい、しかし、聞かせてのを行います 存在確認+存在確認+一意性検証+一意性確認 このような「未来の」スタッフチェーンを作る方法はわかりませんここをクリック 最初の2つは 'ブール'型で、マップを使用すると、これは 'Future [Boolean]'になります。私はこの解決策を考え出すことができません – dsounded

+0

マップの中では、 Future [ブール値]を入力しますがブール値です。だから、必要なチェックをしてから、それがFuture [Boolean]を返すことができます。実際の状況について私があなたに説明してもらいたい場合は、コードを投稿してください。 – Simon

+0

https://pastebin.com/ASssHyvN これは現在の実装では 'Await.result'を使用しているように、問題を示す最小限のコードです – dsounded

関連する問題