Почему skipeWhile не отображает правильные результаты? - PullRequest
0 голосов
/ 24 апреля 2020

SkipWhile() продолжает пропускать элементы, пока условие ввода истинно. Когда условие становится ложным, все остальные элементы возвращаются.

Я пытаюсь выполнить два типа условий:

  1. Оно должно войти, когда loading === false и когда arrIds.length > 0
  2. Он должен вводиться, когда loading === false и когда arrIds.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 Ответ

2 голосов
/ 24 апреля 2020

ваша первая эмиссия [true, []]

ваше условие пропуска может быть переписано как:

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

на английском языке sh: skip while not loading and there are not items, в вашем первом случае эмиссии это оценивает до false && true, то есть false.

skipWhile перестает пропускать после одного false результата, поэтому первое излучение останавливает его оценку больше.

вам необходимо настроить logi c или используйте другой оператор. не могу сказать наверняка, так как вы не обрисовали ожидаемые результаты. Я ожидаю, что вы хотите:

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

, который пропустит первые 2 выброса и испустит третий.

...