2017-03-13 10 views
0

(스칼라)하지만 내 머리에 팝업이 질문을 완료하기 위해 같은 미래를 기다리고 좋은 답변을 온라인으로 찾을 수 없습니다 :여러 프로세스가 지금 그것을 위해 직접 사용을 해달라고

나는이를 함수 'callExactKeyFromDB'는 다음을 반환합니다. [A, Future [A]] (A = 메모리 캐시의 로컬에서, Future [A] = DB 쿼리). 그 미래를 다른 쓰레드/실행 컨텍스트에 전달하고 'onComplete'에 모두 등록 할 수 있을까요, 아니면이 함수가 호출 될 때마다 더 나은가요? 나는 미래를 되찾고, 등록 된 미래의 목록을 유지하고, 양철통.

이제 1 개의 미래와 관련하여 질문을 할 수 있습니까?

합니다 (DB에서 사용자 정보를 요청하는 4 개 과정을 상상하고 계속 기다리고있다) 나는 Either[A,Future[A]] 제거하고 시작하는 Future[A]로 변환 얻을

+1

1) '선물'을 작성할 수 있습니다. [Future]를'Future [List]'로 묶어 라. 2) 모든 것을 상황에 맞게 배치하는 코드를 게시하십시오. – sebszyller

답변

0

예 복수 전화 회선을 Future으로 등록 할 수 있습니다. 이렇게하면 코드가 적게 들고 메모리가 적어지며 더 읽기 쉽습니다.

0

것이다. cache 한 번 특정 사용자를 얻기 위해 데이터베이스에 대한 더 많은 통화를 만들 필요가 없습니다 저장, 컨텍스트간에 공유되는

경우

def getUserByKey(key:Int) : Future[User] = 
    cache.users.contains(key) match { 
    case true => Future(cache.users(key)) 
    case false => Future(User(key = 101, name = "John Doe")) // db call 
    } 

그것은 내가 생각, 일이 많은 간단 할 것 ....

def saveUserCache(u:User) : Future[Unit] = Future{ 
    cache.users.contains(u.key) match { 
    case true => cache.users(u.key) = u 
    case false => cache.users += (u.key -> u) 
    } 
} 

는 그런 일이 선물은 다른 선물
def renderUser(key:Int) : Future[String] = 
    for { 
    user : User <- getUserByKey(key) 
    update : Unit <- saveUserCache(user) 
    output : String <- Future(s"${user.key}: ${user.name}") 
    } yield output 

이 귀하의 질문에 대답 하는가를 만드는 혼합 할 수 있습니까?

+0

내가 왜 당신이 그걸 없애고 싶어하는 지 알 겠어.하지만 여기에 트레이드 오프가있다 : next() 함수, 패턴 매치 (또는 2 ifs)를 호출해야한다면 근본적으로 더 빠르다. 완료된 미래? – ovanwijk