32 lines
677 B
Python
32 lines
677 B
Python
from typing import TypeVar
|
|
|
|
from reactivex import Observable, never
|
|
from reactivex import operators as _
|
|
|
|
_T = TypeVar("_T")
|
|
|
|
|
|
def amb_(*sources: Observable[_T]) -> Observable[_T]:
|
|
"""Propagates the observable sequence that reacts first.
|
|
|
|
Example:
|
|
>>> winner = amb(xs, ys, zs)
|
|
|
|
Returns:
|
|
An observable sequence that surfaces any of the given sequences,
|
|
whichever reacted first.
|
|
"""
|
|
|
|
acc: Observable[_T] = never()
|
|
|
|
def func(previous: Observable[_T], current: Observable[_T]) -> Observable[_T]:
|
|
return _.amb(previous)(current)
|
|
|
|
for source in sources:
|
|
acc = func(acc, source)
|
|
|
|
return acc
|
|
|
|
|
|
__all__ = ["amb_"]
|