2016-11-16 64 views
0

我有一个定义,看起来像这样:斯卡拉函数返回对象类型

sealed trait ServiceResponse 
    case object OK extends ServiceResponse 
    case object SHIT extends ServiceResponse 

    private def remoteService(waitTime: FiniteDuration): ServiceResponse = { 
    val awaitable: Future[Ok.type] = Future.successful { 
     Thread.sleep(waitTime.toMillis) 
     OK 
    } 
    Await.ready(awaitable, waitTime) 
    } 

的remoteService功能抱怨说,它期待一个类型。那么为什么这是一个问题呢?为什么我不能简单地返回一个Object类型?

+1

您所定义的返回类型'ServiceResponse'的方法,但该方法体返回'未来[OK.type]' - 为什么会这样?也许你的意思是'Await.result(awaitable,waitTime)'作为最后一行(可以编译) –

+1

任何你没有返回'Future [ServiceReponse]'的原因? –

回答

0

这是因为您需要使用Await.result而不是Await.ready。这工作:

import scala.concurrent._ 
import scala.concurrent.duration._ 

sealed trait ServiceResponse { 

    case object OK extends ServiceResponse 
    case object SHIT extends ServiceResponse 

    private def remoteService(waitTime: FiniteDuration): ServiceResponse = { 
    val awaitable: Future[OK.type] = Future.successful { 
     Thread.sleep(waitTime.toMillis) 
     OK 
    } 
    Await.result(awaitable, waitTime) 
    } 

} 

而且你有一个错字:未来[Ok.Type]应该是未来[OK.type]