加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何在Play中重复请求!框架2.1?

发布时间:2020-12-16 10:03:57 所属栏目:安全 来源:网络整理
导读:有没有简单的方法来重复请求,直到获得成功结果Play2.1( scala)?以及如何限制尝试次数? 我想做这样的事情: WS.url("some.url").get().map{ response = val strval = someFunction(response) strval match { case "success" = println("do something after
有没有简单的方法来重复请求,直到获得成功结果Play2.1( scala)?以及如何限制尝试次数?

我想做这样的事情:

WS.url("some.url").get().map{ response =>
  val strval = someFunction(response)
  strval match {
    case "success" => println("do something after successful request")
    case "error" => println("repeat same request until success - and repeat maximum N times!")
  }
}

提前致谢!

解决方法

未经测试

你可以这样做:

import scala.concurrent._
import play.api.libs.concurrent.Execution.Implicits._

def withRetry[T](retries:Int = 5)(f: => Future[T]) = 
  f.recoverWith {
    case t:Throwable if (retries > 0) => withRetry(retries - 1)(f)
  }

然后在您自己的代码中,您可以像这样使用它:

withRetry(retries = 2) {
  WS.url("some.url").get
    .map { response =>
      require(someFunction(response) != "error","Please retry")
      response
    }
}

如果您愿意将someFunction重写为Response =>你可以像这样使用它:

def someFunction(r: Response): Boolean = ???

withRetry(retries = 2) {
  WS.url("some.url").get
    .filter(someFunction)
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读