일련의 Future를 순서대로 실행하는 가장 정교한 방법을 찾으려합니다. 하나의 Future의 실행은 이전에 따라 달라집니다. 나는 미래의 임의의 숫자에 대해 이것을하려고 노력하고있다.스칼라 - 임의의 수의 선물을 순차적이지만 의존적으로 실행합니다.
사용자의 경우 :
- 내 데이터베이스에서 ID의 수를 검색했다.
- 이제 웹 서비스에서 관련 데이터를 검색해야합니다.
- 유효한 결과를 찾았 으면 한 번 멈추고 싶습니다.
- 나는 성공한 결과에만 관심이 있습니다.
이들 모두를 병렬로 실행 한 다음 반환 된 결과 컬렉션을 구문 분석하는 것은 옵션이 아닙니다. 한 번에 하나의 요청을 수행해야하며 이전 요청에서 결과가 반환되지 않는 경우에만 다음 요청을 실행해야합니다.
현재 해결책은이 줄을 따라 있습니다. foldLeft를 사용하여 요청을 실행 한 다음 이전 미래가 특정 조건을 충족시키는 경우에만 다음 미래를 평가합니다.
def dblFuture(i: Int) = { i * 2 }
val list = List(1,2,3,4,5)
val future = list.foldLeft(Future(0)) {
(previousFuture, next) => {
for {
previousResult <- previousFuture
nextFuture <- { if (previousResult <= 4) dblFuture(next) else previousFuture }
} yield (nextFuture)
}
}
이의 큰 단점은 내가 행복 그리고 난 난 후 그 결과를 찾았 으면 B), 나는 계속 그 결과를 가지고도 일단 내가 모든 항목을 계속 처리)가있다 술어를 평가합니다. 이 경우에는 간단하지만 사실 더 복잡 할 수 있습니다.
나는 이것에 훨씬 더 우아한 해결책을 놓치고있는 것처럼 느낀다.
이 보이지 않기 때문에 내가 사용 사례에 의해 혼란 스러워요로 변환 할 수 있습니다 이전 Future의 결과가 비어있는 경우에만 다음 Future를 실행하기 때문에 설명하는 데이터 흐름 종속성 ("One Future의 실행은 이전에 따라 달라집니다")과 같은 일종의 데이터 흐름 종속성이 있습니다. 내가 뭘 놓치고 있니? 즉, 다음 미래는 단순히 실행 여부를 결정하는 것 이외의 방법으로 이전 결과에 의존합니까? –
이것은 http : // stackoverflow와 매우 비슷합니다.com/questions/26438991/is-there-sequential-future-find/26439838 # 26439838 (내 대답 참조) 및 http://stackoverflow.com/questions/26349318/how-to-invoke-a-method-again- and-again-until-returns-a-future-value-contains –
@ChrisMartin 다음 미래의 실행은 이전 Future가 성공했는지 여부뿐만 아니라 응답에도 의존합니다. 예 : 이전 상태에 404 상태의 WSResponse가 있으면 다음 미래를 실행하고 그렇지 않으면 실행하지 않습니다. – healsjnr