1
因爲我讀了這篇文章:Querying a Normalized State with RxJS in Angular,我正在合併我的選擇器到他的方式。但我有一個問題與其中之一..問題與rxjs流和ngrx選擇器
目標: 根據屬性對象列表:Object []映射到對象[] []。
簡單的情形:
const a = [
{a:2, b:'d'},
{a:2, b:'e'},
{a:3, b:'f'},
{a:1, b:'b'},
{a:1, b:'c'},
];
const a$ = Rx.Observable.of(a);
a$
.switchMap(items => Rx.Observable.from(items))
.groupBy(item => item.a)
.mergeMap(group => group.toArray())
.toArray()
.subscribe(console.log)
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.4.1/Rx.min.js"></script>
但是,如果觀察到的源通過NGRX選擇提供,我沒有任何結果......它沒有通過mergeMap操作:
products$: Observable<Product[]> = this._store.select(state => state.product.products);
this.products$
.switchMap(products => Observable.from(products))
.groupBy(product => product.productGroup.id)
.mergeMap(group => group.toArray())
.toArray()
.subscribe(console.log)
之前重新選擇,這是工作:
export const getProductGroups = createSelector(getProducts, (products) => {
let productGroups: Product[][] = [];
Observable.from(products)
.groupBy(product => product.productGroup.id)
.mergeMap(group => group.toArray())
.toArray()
.subscribe(pgs => productGroups = pgs);
return productGroups;
});
有人知道爲什麼嗎?
爲什麼你需要的'switchMap'開頭?你爲什麼想要從另一個可觀察對象的內容中重新創建一個新的可觀察對象?我覺得你可以刪除這條線,我錯了嗎? – atomrc