return 通过 rxpy 观察到的值
return a value from observable via rxpy
在函数中将 rx.Observable 对象转换为 'normal' 对象的优雅方法是什么?
例如:
def foo():
return rx.Observable.just('value').subscribe(<some magic here>)
>>> print(foo())
# expected:
# value
# however get:
# <rx.disposables.anonymousdisposable.AnonymousDisposable at SOME ADDRESS>
我了解到 subscribe 的 return 是一个一次性对象,实现它的 'ugly' 方法是:
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
有更好的方法吗?
谢谢。
看看 Observable::to_blocking()
:它创建了一个 BlockingObservable
,它可以强制转换为包含所有发出的项目的列表。例如:
def foo():
return list(rx.Observable.just('value').to_blocking())[0]
我还想指出您的第二个解决方案是危险的,因为无法保证确切的值何时发出,并且您的 __call__
依赖于 'value'
立即发出。
在函数中将 rx.Observable 对象转换为 'normal' 对象的优雅方法是什么?
例如:
def foo():
return rx.Observable.just('value').subscribe(<some magic here>)
>>> print(foo())
# expected:
# value
# however get:
# <rx.disposables.anonymousdisposable.AnonymousDisposable at SOME ADDRESS>
我了解到 subscribe 的 return 是一个一次性对象,实现它的 'ugly' 方法是:
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
有更好的方法吗?
谢谢。
看看 Observable::to_blocking()
:它创建了一个 BlockingObservable
,它可以强制转换为包含所有发出的项目的列表。例如:
def foo():
return list(rx.Observable.just('value').to_blocking())[0]
我还想指出您的第二个解决方案是危险的,因为无法保证确切的值何时发出,并且您的 __call__
依赖于 'value'
立即发出。