Rxjs 何时可以依靠onNext同步传播?

Rxjs 何时可以依靠onNext同步传播?,rxjs,reactivex,Rxjs,Reactivex,的核心原则之一是,所有的onNext通知都是在onComplete/onError通知之前发出的。我想知道我是否可以依靠操作员的onNext通知总是在原始可观察的的onComplete之前发出。有一些明显的组合和定时操作符,如delay、debounce和zip,通常情况下这是不正确的,但是像map、scan或concat这样的操作符呢 在对流项目进行有条件重试/重复时,此计时保证非常重要。例如,假设我想在数据包被丢弃时重试流媒体网络请求: const num_packets$=new Beha

的核心原则之一是,所有的
onNext
通知都是在
onComplete
/
onError
通知之前发出的。我想知道我是否可以依靠操作员的
onNext
通知总是在原始
可观察的
onComplete
之前发出。有一些明显的组合和定时操作符,如
delay
debounce
zip
,通常情况下这是不正确的,但是像
map
scan
concat
这样的操作符呢

在对流项目进行有条件重试/重复时,此计时保证非常重要。例如,假设我想在数据包被丢弃时重试流媒体网络请求:

const num_packets$=new BehaviorSubject();
冷请求$.scan((num,)=>num+1,0)
.repeatWhen(完成=>
takeWhile(=>num\u packets$.getValue()

上述代码易受最后增量[s]之间的竞争条件的影响
num_packets$
和请求的完成,除非
onNext
扫描中的通知都在请求流完成之前发出。

假设我假设您可以从缺少
调度程序
参数推断出您所寻求的保证。也就是说,如果无法向运算符传递一个
调度程序
,它将始终是同步传播。@concat Btw您希望从上述代码中获得什么输出?@martin我希望每次重复请求时都会重置递增的整数。您的问题与您的示例不符。您正在创建单个可观察链。即使在
repeatWhen
subscribe
之间设置延迟,您也可以放心,最终值将在
num\u数据包中。只有在您多次调用
subscribe
或以其他方式创建多个可观察链时,您的问题才有意义。@Pace否,
repeatWhen
通知程序取决于原始流完成时的
行为主体
值,因此,
repeatWhen
subscribe
之间的延迟将导致与同步传播完全不同的流。鉴于此,我假设您可以从缺少
调度程序
参数的情况下推断出所寻求的保证。也就是说,如果无法向运算符传递一个
调度程序
,它将始终是同步传播。@concat Btw您希望从上述代码中获得什么输出?@martin我希望每次重复请求时都会重置递增的整数。您的问题与您的示例不符。您正在创建单个可观察链。即使在
repeatWhen
subscribe
之间设置延迟,您也可以放心,最终值将在
num\u数据包中。只有在您多次调用
subscribe
或以其他方式创建多个可观察链时,您的问题才有意义。@Pace否,
repeatWhen
通知程序取决于原始流完成时的
行为主体
值,因此,
repeatWhen
subscribe
之间的延迟将导致与同步传播完全不同的流。