Неопределенный тип не фильтруется при пропуске?

#typescript #rxjs #ngrx #rxjs-observables #rxjs-pipeable-operators

#typescript #rxjs #ngrx #rxjs-наблюдаемые #rxjs-pipeable-операторы

Вопрос:

Я подписался на асинхронный канал и повторный запуск одного канала -> bservable< AModel | undefined | null> . Я собираю эти четыре канала в combineLatest и subcribe.но мне нужен только приведенный ниже код excute -> Пришла модель. Итак, я использовал skipWhile(([, , , selectedA]) => !selectedA) . но AModel -> undefind не останавливается и переходит к исходному коду ниже. нужна экспертная помощь для ее решения.

——————код ————————————

    combineLatest(observables)
     .pipe(skipWhile(([, , , selectedA]) => !selectedA),
       shareReplayUntil(this.destroySub))
     .subscribe(([a, b, c, selectedA]) => { }```
  

Ответ №1:

skipWhile работает только один раз, это означает, что когда selectedA значение становится отличным от null или undefined skipWhile будет передавать значения впоследствии, даже если новое значение selectedA не определено.

В вашем примере, я предполагаю, что selectedA это значение прибывает, а затем оно становится undefined снова, но во второй раз, когда undefined прибывает, skipWhile ничего не будет делать, и событие будет отправлено.

Если вы хотите всегда избегать selectedA быть undefined или null , используйте filter оператор следующим образом:

 combineLatest(observables).pipe(
    filter(([, , , selectedA]) => selectedA !== null amp;amp; selectedA !== undefined),
    shareReplayUntil(this.destroySub)
  ).subscribe(([a, b, c, selectedA]) => {});