2017-12-07 21 views
-2

メソッドから結果を返そうとしているときにScalaに問題があります。未来Anyは未来Eに準拠していません

私はPlay 2.6とReactiveMongoを使用しています。画像内

エラーが怒鳴る:

enter image description here

enter image description here

誰かがいくつかの手がかりを与えてもらえますか?上記のコードのよう

result.map(writeResult: WriteResult => { 
    case Success => entity 
    case Failure(f) => f.printStackTrace() 
    }) 

、あなたは以下のとおりです。

+0

コードの将来の構成は、実際には構造化されておらず、むしろ理解とタイプのチェックに使用されています。 – cchantep

+0

@cchantepはい、わかりませんが、私は理解のために使用することを心掛けていますが、私はScalaではあまり習熟していません。何が原因で問題が発生しているのか分かりますか? –

+0

不正な構成には型エラーがあります。特に、 'printStackTrace'の' Unit'を与える 'result.map'とそうでない場合は' entity:E'があります。 – cchantep

答えて

1

Future.map方法は等しい秒Future結果、「あなたのコードのために、それはマッピングresultですので、sの結果」Futureをマッピングするために機能を受け入れていますWriteResultUnitを返そうとしているので、map結果タイプはAnyであり、戻り値はFuture[Any]です。型の不一致がスローされたコンパイルエラーです。

実際に必要なのはresult.map(writeResult: WriteResult => entity)です。私はあなたが本当にしたいことはFuture.transformの代わりmapであると思われる

val res = create(entity) 
    res.onComplete { 
    case Success(e) => println(e) 
    case Failure(f) => f.printStackTrace() 
    } 
1

create方法のように、あなたが呼び出すことができます。このようなもの

val result: Future[WriteResult] = ??? 
    result.transform(_ => entity, 
    e => { 
     e.printStackTrace() 
     e // or return here your custom wrapper exception 
    }) 
関連する問題