通过rxpy从observable返回一个值

时间:2017-09-05 09:17:40

标签: python reactivex rx-py

将rx.Observable对象转换为' normal'的优雅方式是什么?函数中的对象?

e.g:

def foo():
    return rx.Observable.just('value').subscribe(<some magic here>)

>>> print(foo())

# expected:
# value
# however get:
# <rx.disposables.anonymousdisposable.AnonymousDisposable at SOME ADDRESS>

我知道订阅的回归是一个一次性的对象,而且是一个丑陋的对象。实现这个的方法是:

class Foo:
    def __init__(self):
        self.buffer = None

    def call_kernel(self):
        rx.Observable.just('value').subscribe(lambda v: self.buffer = v)

    def __call__(self):
        self.call_kernel()
        return self.buffer
>>> Foo()

# get:
# value

有没有更好的方法呢?

感谢。

1 个答案:

答案 0 :(得分:4)

查看Observable::to_blocking():它会创建一个BlockingObservable,它对包含所有已发出项目的列表具有强制性。以你的例子:

def foo():
  return list(rx.Observable.just('value').to_blocking())[0]

我还想指出你的第二个解决方案是危险的,因为无法准确确定何时会发出值,并且__call__依靠'value'立即发出。< / p>