NgRx: Как выполнить console.info store.select изнутри эффекта?

Я изучаю NgRx и пытаюсь записать в console.info некоторые значения, выбранные из хранилища внутри эффекта. Я не очень хорошо разбираюсь в RxJ. Когда я пытаюсь, он показывает что-то вроде этого вместо числа:

NgRx: Как выполнить console.info store.select изнутри эффекта?

Вот код:

resetSample$= createEffect(() => this.actions$.pipe(
    ofType(DecisorActions.ResetSampleAction),
    map(() => { 
        this.file.readlineGuard(); // throw EOF error

        // I would like to console.info() those number values:
        console.info(this.store.select(Selectors.getA)));
        console.info(this.store.select(Selectors.getB)));
        console.info(this.store.select(Selectors.getC)));

        console.info('RESET SAMPLE EFFECT');

        return DecisorActions.BuyAction({payload: 0});
    }),
    catchError( err => { console.info('EOF detected'); return of(DecisorActions.EndOfFileError({payload:0})); })
));

Если мне не хватает некоторых важных понятий, я также был бы признателен за рекомендации о том, что читать/искать.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
0
94
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошим ресурсом для просмотра будет NgRx Инкорпорирующее государство, который использует concatLatestFrom. В качестве альтернативы вы можете использовать оператор RxJs withLatestFrom. Из этой ссылки NgRx говорится:

When state is needed, the RxJS withLatestFrom or the @ngrx/effects concatLatestFrom operators can be used to provide it.

По сути, у вас будет что-то вроде:

resetSample$= createEffect(() => this.actions$.pipe(
    ofType(DecisorActions.ResetSampleAction),
    withLatestFrom(
      this.store.select(Selectors.getA),
      this.store.select(Selectors.getB),
      this.store.select(Selectors.getC)
    ),
    map(([action, a, b, c]) => { 
        this.file.readlineGuard(); // throw EOF error

        // Log values here:
        console.info(a);
        console.info(b);
        console.info(c);

        console.info('RESET SAMPLE EFFECT');

        return DecisorActions.BuyAction({payload: 0});
    }),
    catchError( err => { console.info('EOF detected'); return of(DecisorActions.EndOfFileError({payload:0})); })
));

Примечание: При использовании версии 6 RxJS допускается только 5 аргументов в withLatestFrom. См. проблему это Github.

Начиная с версии 7, код был обновлен, чтобы разрешить любое количество аргументов. См. код оператора здесь.

есть лишний ) у getA)) и так далее, в примере

João Otero 18.03.2022 12:47

кстати, я только что обнаружил, что если вы попытаетесь использовать более 5 аргументов внутри WithLatesFrom, он сломается

João Otero 18.03.2022 13:48

ссылка для проблемы более 5 аргументов: github.com/ReactiveX/rxjs/issues/5221

João Otero 18.03.2022 13:58

Хороший улов по максимальному количеству аргументов для withLatestFrom! Я отредактирую свой ответ, чтобы сообщить об этом другим. Как только будет более 2-3 аргументов, в этот момент я настоятельно рекомендую создать новый селектор, чтобы получить нужную мне информацию.

JHizzal 18.03.2022 15:23

@JoãoOtero, больше смотрите на withLatestFrom, который был обновлен в версии 7, чтобы принимать больше аргументов, а не жестко запрограммирован на 5. Я также опубликую это в своем ответе.

JHizzal 18.03.2022 15:27

еще вопрос: что такое «действие» в начале функции карты?

João Otero 18.03.2022 19:20

@JoãoOtero действие — это действие, которое передается в этот эффект, который является первой строкой с ofType(DecisorAction.ResetSampleAction). Таким образом, вы можете использовать переменную action для доступа к любой информации, которая может содержаться в действии.

JHizzal 19.03.2022 16:44

Другие вопросы по теме