def resolve(url: String): Future[WSResponse] = ws.url(url).withFollowRedirects(true).get()
def validateAllLinks(links: List[String]) = ???
어떻게 두 번째 기능을 해결 하시겠습니까?ScalaWS (Play!)와 동시에 http-URL 목록을 확인하는 방법은 무엇입니까?
def validateAllLinks(links: List[String]) = links.map(link =>
Await.result(resolve(link), Duration.create(3, TimeUnit.SECONDS))
)
이 접근 방식의 문제점 : 내가 얻을
내가 트래버스, Future.sequence, 기다리고 있습니다을 시도
...
이 나의 가장 최근의 시도였다 TimeoutExceptions 및 MaxRedirectException 시도/catch 싶지 않아
솔루션이 작동한다고해도 솔루션이 동시라고 생각하지 않습니다.
미리 감사드립니다. 당신이 Future.sequence
후 Await.result
를 호출하는 경우가 완료 병렬 작업을 기다리는,
def validateAllLinks(links: List[String]): Future[List[WSResponse]] =
Future.sequence(links.map(resolve))
:
수정, 그러나 그것은하지 않는 이러한 접근 방식에 문제가 개별 요청에 대한 시간 초과 및 오류를 처리 할 수 있습니다. 아마이 링크 : https://stackoverflow.com/questions/17466889/run-multiple-futures-in-parallel-return-default-value-on-timeout 도움이됩니다. – igorpcholkin
맞아, 내 솔루션은 그것을 동시에 만들어야했다. 타임 아웃을 처리하려면 resolve 메소드에서'ws.url (url) .withRequestTimeout (timeout)'을 사용해야합니다. 그리고'resolve (..). 복구 (..)'는 어떤 테이블이 실패하고 어떤 테이블이 성공했는지를 이해하는데 사용되어야한다. – Feyyaz