为什么不跳过却显示正确的结果?

时间:2020-04-24 20:25:08

标签: rxjs

只要输入条件为true,

SkipWhile()就会继续跳过元素。当条件变为假时,所有剩余元素将返回。

我要尝试的是两种条件:

  1. 必须在loading === falsearrIds.length > 0时输入
  2. 必须在loading === falsearrIds.length === 0时输入

我的例子:

combineLatest([this.peopleSelectorsService.loading, this.peopleSelectorsService.allIds])
    .pipe(skipWhile((observables) => !observables[0] && observables[1].length === 0))
    .subscribe((observables) => {

    });

结果:

enter image description here

1 个答案:

答案 0 :(得分:1)

您的第一个发射是[true, []]

您的跳过条件可以重写为:

skipWhile(([loading, items]) => !loading && !items.length)

英语:skip while not loading and there are not items,在您的第一个发射情况下,其计算结果为false && true,即false

skipWhile在得到一个false结果之后停止跳过,因此第一个发射将不再对其求值。

您需要调整逻辑或使用其他运算符。您尚未概述预期的结果,因此无法确定。我想要的是:

skipWhile(([loading, items]) => loading || !items.length)

将跳过前2次发射,并发射第三次。