- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
用例实际上非常典型。许多 Web 服务使用您在 session 开始时检索的授权 token ,您需要在后续请求中发回这些 token 。
我知道我可以这样做:
lazy val myData = {
val request = ws.url("/some/url").withAuth(user, password, WSAuthScheme.BASIC).withHeaders("Accept" -> "application/json")
Await.result(request.get().map{x => x.json }, 120.seconds)
}
这感觉不对,因为所有文档都说我们永远不会等待。
是否有 Future/Promise Scala 风格的方式来处理这个问题?
我发现 .onComplete
允许我在 Promise 完成时运行代码,但是如果不使用(可变的)var
我看不出有什么办法该范围内的值转换为不同范围内的 lazy val
。即使使用 var
也可能存在时间问题——因此可变变量的弊端 :)
还有其他方法吗?
最佳答案
不幸的是,没有办法使它成为非阻塞的 - lazy val
被设计成同步的并阻塞任何访问它们的线程,直到它们完成一个值(内部 lazy val
表示为一个简单的synchronized
block )。
Future/Promise
Scala 方法是使用 Future[T]
或 Promise[T]
而不是 val x: T
,但这种方式意味着每次使用 val 时 executionContext
和 map
的大量开销,以及更优化的资源在所有情况下,利用率可能都不值得降低可读性,因此如果您在应用程序的许多部分广泛使用该值,则可以将 Await
留在那里。
关于scala - Play 2.5.x (Scala) -- 如何将通过 wsClient 获得的值放入(惰性)val,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37617384/
我在soap中的cxf + WSClient有一些问题。 我正在用grails编写一个小工具,该工具必须对现有服务进行SOAP调用。 WSClient(groovyws-0.5.3-20100521.
在一个大型 Play 2.5 应用程序的一个部分,我需要为供应商的网站制作一个 TLS。供应商给了我一个证书(P7B 证书,如果重要的话),我将使用它。 如果我使用 curl 会很简单:curl --
在 Play 2.4.3 网络应用程序中,我需要使用 WSClient 通过 HTTPS 调用其他服务。我关注了the article但出现错误: play.api.libs.ws.ssl.Compo
我正在尝试通过自定义 ssl 配置在我的 Play 应用程序中使用 WSClient,但它不起作用。 我的 Controller 如下所示: @Singleton class HomeControll
我有一个 WS avaialbel @ http://domain.com/Service?wsdl 。 wsdl 导入多个 XSD 定义。当我尝试调用如下所示的服务时,我收到一个异常,说它无法在服务
我正在尝试使用以下方法将一个类 DI 到单元测试中: val injector = new GuiceInjectorBuilder().injector() val secured = inject
我在 playframework 中遇到 WSClient 问题。 当我在finally block 中发送关闭WSClient的请求时: public WSResponse sendPostReq
我试图用 groovy WSClient 连接到 Exchange 服务器 wsdl,但不能,因为我收到一个空文件(当我想解析 wsdl 时)。我正在使用以下几行: Map mapClient=[
我正在使用 Play 的 WSClient 与第三方服务进行交互 request = ws.url(baseUrl) .post(data) .map{ response => re
我当前正在尝试使用 WSClient 使用以下代码将文件发布到端点 public Result uploadBankingFile(){ logger.info("Uploading file
Documentation建议使用模拟网络服务测试基于 WSClient 的 API 客户端,即创建一个 play.server.Server 来响应真实的 HTTP 请求。 我更愿意直接从文件创建
在编写 JAXWS 客户端时,这是我过去使用的: // CALL SERVICE EPaymentsService bPayService = new EPaymentsService(); Serv
在编写 JAXWS 客户端时,这是我过去使用的: // CALL SERVICE EPaymentsService bPayService = new EPaymentsService(); Serv
我使用 play 2.6.0 和 scala 2.11.8 我一直使用 play 的 WSClient,使用相同的配置没有任何问题: 应用程序.conf: play { ws.timeout.co
基本上,我正在尝试使用 Java 在我的 SBT 应用程序中创建自定义 WSClient。由于我不需要任何注入(inject)依赖项,因此我使用 documentation 中显示的方法。 。要创建自
这是我想要做的 package gc.services.http.playWs.lmi import com.softwaremill.macwire.Macwire import play.api.
我有一个注入(inject)了 WSClient 依赖项的类: @Singleton class MyApiService @Inject() (wsclient: WSClient, conf: C
我们正在使用带有 java 的 play2.5。我有一个自定义类,即 A 类,我在其中通过 DI 注入(inject)了一个 WSClient 对象作为自定义类 A 的属性。我们创建此自定义类 A 的
我正在尝试使用来自 Play Framework 的 WSClient API 调用网络服务。主要问题是我想在不超过最大有效载荷大小的情况下传输巨大的 JSON 有效载荷(超过 2MB)。 为此,我想
用例实际上非常典型。许多 Web 服务使用您在 session 开始时检索的授权 token ,您需要在后续请求中发回这些 token 。 我知道我可以这样做: lazy val myData = {
我是一名优秀的程序员,十分优秀!