не может правильно получить данные Firebase через эффект ngrx - PullRequest
0 голосов
/ 28 февраля 2019

Я впервые обращаюсь к вам за помощью, потому что у меня большие проблемы.Я использую эффекты ngrx для загрузки некоторых товаров в корзину при запуске приложения из базы данных Firebase в реальном времени.В качестве полезной нагрузки я получаю весь объект моментального снимка базы данных Firebase, а не только сами элементы магазина, поэтому хранилище ngrx получает объект, который он не может понять, и состояние приложения не изменяется.

Проверьте фотографии, пожалуйста: когда console.logged (), я вижу именно те объекты, которые мне нужны.Но Redux Devtools раскрывают реальную сделку, и я не знаю, как это исправить.Может ли кто-нибудь дать мне совет?Большое спасибо.

Эффект выглядит следующим образом:

@Effect()
getShopItems: Observable<any> = this.actions.pipe(
    ofType(shopActions.GET_ITEMS),
    switchMap(() => {
        return of(this.database.ref('cart').once('value', snap => {
            snap.forEach(childSnap => childSnap.val());
            // snap.forEach(childSnap =>
            // console.log(childSnap.val()));
        }))
            .pipe(
                map((payload) => {
                    return {
                        type: 'GET_ITEMS_SUCCESS',
                        payload: payload
                    };
                }
            ));
    })
);

Функции редуктора для рассматриваемых действий выглядят следующим образом:

case shopActions.GET_ITEMS: {
            return {
                ...state,
                shopItems: [...state.shopItems],
                itemCount: state.shopItems.length
            };
}
case shopActions.GET_ITEMS_SUCCESS: {
            return {
                ...state,
                shopItems: [action.payload],
                itemCount: state.shopItems.length + 1
            };
}

https://imgur.com/a/pDGAwFI

1 Ответ

0 голосов
/ 01 марта 2019

Используйте из вместо из :

import { from } from 'rxjs';

@Effect()
getShopItems: Observable<any> = this.actions.pipe(
    ofType(shopActions.GET_ITEMS),
    switchMap(() => {
        return from(this.database.ref('cart').once('value', snap => {
            snap.forEach(childSnap => childSnap.val());
        }))
            .pipe(
                map((payload) => {
                    return {
                        type: 'GET_ITEMS_SUCCESS',
                        payload: payload
                    };
                }
            ));
    })
);

RxJs из - https://www.learnrxjs.io/operators/creation/from.html

...