2013-02-19 48 views
49

नहीं खोजा जा सका मैं इस तरह एक वेब सेवा बोल रहा हूँ:प्ले फ्रेमवर्क 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

निष्पादन संदर्भ के बारे में। कुछ लोग सोचते हैं कि यह स्कैला वैश्विक संदर्भ के समान ही है। हालांकि यह नहीं है। [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 = सीसी) तो यह वास्तव में प्ले अभिनेता प्रणाली का निष्पादन संदर्भ है। यह आपको application.conf – EECOLOR

+0

का उपयोग करके व्यवहार बदलने की अनुमति देता है। "यह समस्या" लिंक अब टूटा हुआ है। वेब पर एक संग्रह है। हालांकि: http://web.archive.org/web/20140222113140/http://play.lighthouseapp.com/projects/82401/tickets/899-error-cannot-find-an -इम्पलीट-निष्पादन कॉन्टेक्स्ट-या-आवश्यकता-एक-स्वयं-या-आयात-निष्पादन कॉन्टेक्स्टिमप्लिकिट्सग्लोबल – EdgeCaseBerg

+0

@EdgeCaseBerg धन्यवाद, मैंने लिंक – EECOLOR

-1

एक वैकल्पिक विकल्प:

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

कृपया इस निष्पादन संदर्भ के संबंध में ऊपर दिए गए प्रश्न पर मेरी टिप्पणी देखें। – EECOLOR

1

प्ले 2.4 जब से तुम Guice निर्भरता के माध्यम से डिफ़ॉल्ट 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

+0

प्ले प्रलेखन (कम से कम 2.6) के अनुसार, @ mgosk का उत्तर मानक है; देखें: https://www.playframework.com/documentation/2.6.x/ThreadPools#Using-the-default-thread-pool – juanmirocks

+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