1

問題は、RX でダブル ループ動作をエミュレートすることです。

while True:
    try:
        token = get_token()
        while True:
            try:
                value = get_value_using_token(token)
                do_something(value)
            except:
                break
    except:
        break

2 つのループが 2 つのオブザーバブルに置き換えられ、一方が外側のオブザーバーとして機能し、do_something(value)それ自体をオブザーバーに置き換えることができれば、きれいになります。例外も適切に処理できます。外側のループはブロックする必要がありますが、バックオフ関数で再試行関数を使用して外側のループを使用して例外を処理しようとしているため、内側のループはそうでない場合があります。

これまでのところ、次を使用してシーケンスを構築できます。

Observable.from_iterable(value for value in iter(get_token, None))
    .subscribe(do_something)

しかし、アウターのブロッキングモードで同様の構造を作成するにはどうすればよいですか?

4

2 に答える 2

1

Repeat演算子を使用してループを作成するだけです。そして、 Retryオペレーターが失敗しても続行する必要があります。

何かのようなもの

Observable.return(get_token())
    .flatMap(token->Observable.return(get_value_using_token(token))
        .repeat())
    .retry()
.subscribe(do_something)

※pythonはよくわからないので、その疑似コードを変換していただけると幸いです

于 2016-04-07T02:36:11.047 に答える