2017-12-07 1 views
-2

메소드에서 결과를 반환하려고 할 때 Scala에서 문제가 발생합니다.미래 Any가 Future 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 예, 명확하지 않지만 이해를 위해 사용하는 것을 명심하지만 스칼라에서는 아직 능숙하지 않습니다. 내 문제의 원인을 아시나요? –

+0

잘못된 구성은 형식 오류가 발생하기 쉽습니다. 특히 'printStackTrace'에서 'Unit'을 지정하는 'result.map'과 그렇지 않으면 'entity : E'가 주어지기 때문에 'Any'만이 일관 적입니다. – cchantep

답변

1

Future.map 방법은 같음의 Future 결과, '코드를 들어, 매핑 result, 그래서의 결과'는 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 
    }) 
관련 문제