【问题标题】:return a value from observable via rxpy通过 rxpy 从 observable 返回一个值
【发布时间】:2017-09-05 09:17:40
【问题描述】:

在函数中将 rx.Observable 对象转换为“普通”对象的优雅方法是什么?

例如:

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 的返回是一个一次性对象,实现它的“丑陋”方式是:

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

有没有更好的方法来做到这一点?

谢谢。

【问题讨论】:

    标签: python reactivex rx-py


    【解决方案1】:

    看看Observable::to_blocking():它创建了一个BlockingObservable,它可以强制转换为一个包含所有发射项目的列表。以您为例:

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

    我还想指出您的第二个解决方案是危险的,因为无法保证确切何时发出值,并且您的 __call__ 依赖于 'value' 立即发出。

    【讨论】:

      猜你喜欢
      • 2018-11-21
      • 2017-04-17
      • 2021-11-07
      • 2020-10-10
      • 2015-06-27
      • 1970-01-01
      • 2014-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多