Как использовать Rx js startWith для предоставления начальных значений по умолчанию withLatestFrom, используя значение внешней наблюдаемой? - PullRequest
0 голосов
/ 31 марта 2020

это работает, но я не хочу использовать null для начальных значений startDate и endDate, мне нужно инициализировать значениями из другой наблюдаемой, userInfo $ в приведенном ниже коде:

export interface IUserInfo {
    UserEntryStartDate: Date;
    UserEntryEndDate: Date;
    // ...
}


public userInfo$: Observable<IUserInfo>;

private dateFilterSubject = new Subject<{
    startDate: Date;
    endDate: Date;
}>();

        this.userInfo$
            .pipe(
                withLatestFrom(
                    this.dateFilterSubject.pipe(
                        startWith({
                            startDate: null,
                            endDate: null
                        })
                    )
                )
            )
            .subscribe(([userInfo, dateFilters]) => {
                // ... do stuff
            }

Это то, что я хотел бы сделать

        this.userInfo$
            .pipe(
                takeWhile(() => this.active),
                withLatestFrom(user => // userInfo from outer observable
                    this.dateFilterSubject.pipe(
                        startWith({
                            startDate: user.UserEntryStartDate,
                            endDate: user.UserEntryEndDate
                        })
                    )
                )
            )
            .subscribe(([userInfo, dateFilters]) => {
                // do stuff
            }

Это даже дает правильное автозаполнение и ввод параметра user, однако я получаю сообщение об ошибке при подписке:

Type 'Observable<{ startDate: Date; endDate: Date; } | { startDate: Date; endDate: Date; }>' must have a '[Symbol.iterator]()' method that returns an iterator.

Что я делаю не так?

1 Ответ

1 голос
/ 31 марта 2020

Вы можете использовать BehaviorSubject для того же. Здесь вы можете установить значение по умолчанию.

Пример:

private user = new BehaviorSubject<string>('john');

В вашем случае:

private dateFilterSubject = new BehaviorSubject<{
  startDate: Date;
  endDate: Date;
 }>({{value}});

Для получения дополнительной информации, пожалуйста, обратитесь:

https://www.learnrxjs.io/learn-rxjs/subjects/behaviorsubject

Надеюсь, это поможет.

...