#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]) => {});