RXJS轮询:返回空的可观察值将取消轮询

时间:2020-05-15 08:36:05

标签: rxjs observable polling

在以下代码段中,当条件有效时,将在指定的时间间隔内轮询两个可观察的请求。但是,当第一个switchMap有条件地返回“空”时,轮询将被取消,而第二个switchMap不会针对轮询线程执行。

  let pollingRequests = interval(10000).pipe(startWith(0),
   switchMap(() => {
    return condition ? validObservable: empty;
  }),
  switchMap(() => {
     return condition ? validObservable: empty;
  }),
);

2 个答案:

答案 0 :(得分:1)

请注意,RxJ中的“空”只会“完成”流,而不会发出任何东西。

因此,如果第一个switchMap完成,它将沿流发送完整的信号。不会“正常”发射,因此第二个switchMap甚至不会被触发。这样一来,整个流就完成了,计时器也死了。

因此,根据您要实现的目标,您可以更改例如使用combinateLatest,然后将两个“子”可观察对象一起订阅(并“一起”发出其值),如果完成,则每个从另一个将与最后一次成功完成的发射结合。

但是“解决方案”很大程度上取决于您要实现的目标。

答案 1 :(得分:1)

您可以尝试返回NEVER而不是empty,以使流无法完成。

 let pollingRequests = interval(10000).pipe(startWith(0),
   switchMap(() => {
    return condition ? validObservable: NEVER;
  }),
  switchMap(() => {
     return condition ? validObservable: NEVER;
  }),
);
相关问题