2013-02-19 44 views
49

我打电话web服务这样的:播放框架2.1 - 无法找到一个隐含的ExecutionContext

WS 
    .url(url) 
    .get 
    .map { response => // error occurs on this line 
    response.status match { 
     case 200 => Right(response.json) 
     case status => Left(s"Problem accessing api, status '$status'") 
    } 
} 

完整的错误:Error: Cannot find an implicit ExecutionContext, either require one yourself or import ExecutionContext.Implicits.global

回答

115

this issue,它是固定的文档。我需要添加以下导入:

import play.api.libs.concurrent.Execution.Implicits._ 
+7

关于执行上下文。有些人认为这与Scala全球环境是一回事。但事实并非如此。 [Execution.scala](https://github.com/playframework/playframework/blob/2.2.x/framework/src/play/src/main/scala/play/api/libs/concurrent/Execution.scala)指向[Invoker.scala](https://github.com/playframework/playframework/blob/2.2.x/framework/src/play/src/main/scala/play/core/system/Invoker.scala?source = cc) 所以它实际上是Play演员系统的执行上下文。这使您可以使用application.conf – EECOLOR 2013-12-21 18:49:07

+0

更改行为。“此问题”链接现在已被破坏。在web.archive上有一个存档:http://web.archive.org/web/20140222113140/http://play.lighthouseapp.com/projects/82401/tickets/899-error-cannot-find-an -implicit-executioncontext-any-require-one-yourself-or-import-executioncontextimplicitsglobal – EdgeCaseBerg 2015-12-07 17:30:11

+0

@EdgeCaseBerg谢谢你,我已调整链接 – EECOLOR 2015-12-08 07:35:12

-1

另外一种方式:

import scala.concurrent.ExecutionContext.Implicits.global 
+0

请参阅我对有关此执行上下文的upvoted问题的评论。 – EECOLOR 2016-04-15 20:23:15

1

由于播放2.4,您可以通过吉斯依赖注入默认execution context:注射。

class Foo @Inject()()(implicit ec:ExecutionContext) { 

def bar() = { 
    WS.url(url) 
    .get 
    .map { response => // error occurs on this line 
     response.status match { 
     case 200 => Right(response.json) 
     case status => Left(s"Problem accessing api, status '$status'") 
    } 
    } 
} 
+0

您的代码不会注入执行上下文。它仍然使用隐式解析来获取执行上下文。 – EECOLOR 2016-05-17 13:43:45

+0

根据Play文档(至少2.6),@ mgosk的答案是标准;请参阅:https://www.playframework.com/documentation/2.6.x/ThreadPools#Using-the-default-thread-pool – juanmirocks 2017-10-06 11:07:39

+0

但是,还有更多。你也可以扩展/定义'CustomExecutionContext'。请参阅:https://www.playframework.com/documentation/2.6.x/Migration26#play.api.libs.concurrent.Execution-is-deprecated和https://www.playframework.com/documentation/2.6.x/ Highlights26#CustomExecutionContext和线程池大小调整 – juanmirocks 2017-10-07 13:39:57