the Observable contract的核心原则之一是在onNext
/ onComplete
通知之前发出所有onError
次通知。我想知道我是否可以依赖来自运营商的onNext
通知始终位于原始onComplete
的{{1}}之前。有明显的组合和计时运算符,例如Observable
,delay
和debounce
,这一般不是真的,但zip
,map
之类的呢?还是scan
?
当重试/重复条件对流项目时,此时间保证很重要。例如,假设我想在丢弃数据包时重试流式网络请求:
concat
上述代码容易受到const num_packets$ = new BehaviorSubject();
cold_request$.scan((num, _) => num + 1, 0)
.repeatWhen(completions =>
completions.takeWhile(_ => num_packets$.getValue() < expected_num_packets)
)
.subscribe(num_packets$);
的最后一个增量[s]与请求完成之间的竞争条件的影响,除非num_packets$
之外的onNext
通知都在请求流完成。