2017-09-05 7 views
1

rx.Observableオブジェクトを関数の '通常の'オブジェクトに変換するうまい方法は何ですか?rxpy経由で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> 

私が購読のリターンは使い捨てのオブジェクトであり、これを実現するために「醜い」の方法があることを理解:

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を生成し、放出されたすべての項目を含むリストに強制的になります。あなたの例:値が放出され、あなたの__call__はすぐに発光するように'value'に依存している正確に保証がないため

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

私はまた、あなたの第二の溶液は危険であると指摘したいと思います。

関連する問題