Как объединить фьючерсы разных типов в один фьючерс без использования zip()

Я хочу создать Future типа Future[(Class1,Class2,Class3)]из приведенного ниже кода. Однако единственный способ сделать это — использовать zip (). Я нахожу решение уродливым и, по правде говоря, не оптимальным. Может кто просветил меня.

val v = for (
    a <- {
        val f0:Future[Class1] = process1
        val f1:Future[Class2] = process2
        val f2:Future[Class3] = process3
        f0.zip(f1).zip(f2).map(x => (x._1._1,x._1._2,x._2))
    } yield a  // Future[(Class1,Class2,Class3)]

Я также пытался использовать Future.sequence(List(f0, f1, f2)), но это не сработает, поскольку новый Future будет иметь тип Future[List[U]], где U— это lub Class1/2/3, тогда как мне нужен кортеж из 3 -, сохраняющий исходные типы

32
задан Andrey 25 February 2016 в 23:22
поделиться