Angular7 Ngrx6 с последним предупреждением

#angular #ngrx #rxjs6

#angular #ngrx #rxjs6

Вопрос:

У меня возникла проблема при использовании withLatestFrom. Консоль показывает следующую ошибку:

Вы указали ‘undefined’ там, где ожидался поток. Вы можете предоставить наблюдаемый, обещаемый, массив или итерируемый

Код является:

 import { first, map, distinctUntilChanged, withLatestFrom } from 'rxjs/operators';

    this.subscriptionList.push(
        this.store
            .select(fromReducer.getSelectedProduct)
            .pipe(withLatestFrom(this.store.select(fromReducer.getAllUrlConfigurationEntities)))
            .pipe(
                map(([product, urlConfigurations]) => {
                    const my_product = product || {};
                    return {
                        urlConfigurations,
                        product: my_product
                    };
                }),
                distinctUntilChanged((previous: any, current: any) => current.urlConfigurations.length === 0 || previous.product.id === current.product.id)
            )
            .subscribe(data => {
                const urlConfigurations = data.urlConfigurations;
                console.log(urlConfigurations);
                if (urlConfigurations) {
                    this.urlConfigurations = JSON.parse(JSON.stringify(urlConfigurations));
                }

                return;
            })
    );
  

Я попытался вернуть наблюдаемое подобное .pipe(withLatestFrom(this.store.select(fromReducer.getAllUrlConfigurationEntities))) .

Но мне нужно значение впоследствии, а не наблюдаемое.

Спасибо за вашу помощь и время!

Комментарии:

1. Убедитесь, что вы импортируете из правильного модуля Rxjs, а не из внутренних компонентов.

2. Где я теряюсь, это все примеры, которые я видел, импортируют операторы следующим образом: import { first, map, distinctuntuntilchanged } из ‘rxjs / operators’;

3. Да, это правильно.

4. Это то, что я пробовал, но все еще получаю эту ошибку. Следует отметить, что я получил это, как только обновился с rxjs 5 на 6.

5. Спасибо @cgTag. Я смог заставить его работать, изменив импорт combineLatest, чтобы использовать rxjs, а не operator. Старая javascript import { combineLatest } from 'rxjs/operators'; рабочая версия кода для моего варианта использования javascript import {combineLatest } from 'rxjs';

Ответ №1:

Вы должны использовать createSelector селектор, а не getter из редуктора.