#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
из редуктора.