问题是用 RX 模拟双循环行为:
while True:
try:
token = get_token()
while True:
try:
value = get_value_using_token(token)
do_something(value)
except:
break
except:
break
如果将两个循环替换为两个可观察对象,则将是干净的,其中一个充当外部的观察者,而do_something(value)
可以自己替换为观察者。任何异常也可以很好地处理。外循环需要阻塞,但内循环可能不是,因为我正在尝试使用外循环来处理异常,使用带有退避函数的重试函数。
到目前为止,我可以使用以下方法构建序列:
Observable.from_iterable(value for value in iter(get_token, None))
.subscribe(do_something)
但是我怎样才能在外部的阻塞模式下制作类似的结构呢?