将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
有没有更好的方法呢?
感谢。
答案 0 :(得分:4)
查看Observable::to_blocking()
:它会创建一个BlockingObservable
,它对包含所有已发出项目的列表具有强制性。以你的例子:
def foo():
return list(rx.Observable.just('value').to_blocking())[0]
我还想指出你的第二个解决方案是危险的,因为无法准确确定何时会发出值,并且__call__
依靠'value'
立即发出。< / p>