2017-09-05 65 views
1

將rx.Observable對象轉換爲函數中的「普通」對象的優雅方式是什麼?通過rxpy從可觀察值返回值

如:

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 

有沒有更好的方式來做到這一點?

謝謝。

回答

3

看看Observable::to_blocking():它會創建一個BlockingObservable,它可以強制包含所有發出的項目。對於你的例子:

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

我也想指出你的第二個解決方案是很危險的,因爲不能保證什麼時候值將被髮出,而你的__call__依靠'value'立即發出。