Corrida de futuros / sucesso

Estou aprendendo futuros, e estou tentando criar um método que tome dois futuros como parâmetro (f eg) e retornar o primeiro futuro que foi concluído com sucesso, caso contrário ele retornaf oug.

Alguns casos de uso para ilustrar o comportamento do meu método são:

Future 1        | Future 2         | Result
Success First     Success Second     Future 1
Success First     Failure Second     Future 1
Success Second    Success First      Future 2
Success Second    Failure First      Future 1
Failure First     Failure Second     Future 2 (because we had a failure on Future 1, so try to see what is the result Future 2)

Então eu criei este método:

def successRace(f: Future[T], g: Future[T]): Future[T] = {
        val p1 = Promise[T]()
        val p2 = Promise[T]()
        val p3 = Promise[T]()
        p1.completeWith(f)
        p2.completeWith(g)
        p3. ????
        p3.future
}

E agora, como posso saber qual deles foi concluído primeiro?

questionAnswers(3)

yourAnswerToTheQuestion