Я изучаю NgRx и пытаюсь записать в console.info некоторые значения, выбранные из хранилища внутри эффекта. Я не очень хорошо разбираюсь в RxJ. Когда я пытаюсь, он показывает что-то вроде этого вместо числа:
Вот код:
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 Инкорпорирующее государство, который использует 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, код был обновлен, чтобы разрешить любое количество аргументов. См. код оператора здесь.
кстати, я только что обнаружил, что если вы попытаетесь использовать более 5 аргументов внутри WithLatesFrom, он сломается
ссылка для проблемы более 5 аргументов: github.com/ReactiveX/rxjs/issues/5221
Хороший улов по максимальному количеству аргументов для withLatestFrom! Я отредактирую свой ответ, чтобы сообщить об этом другим. Как только будет более 2-3 аргументов, в этот момент я настоятельно рекомендую создать новый селектор, чтобы получить нужную мне информацию.
@JoãoOtero, больше смотрите на withLatestFrom, который был обновлен в версии 7, чтобы принимать больше аргументов, а не жестко запрограммирован на 5. Я также опубликую это в своем ответе.
еще вопрос: что такое «действие» в начале функции карты?
@JoãoOtero действие — это действие, которое передается в этот эффект, который является первой строкой с ofType(DecisorAction.ResetSampleAction). Таким образом, вы можете использовать переменную action для доступа к любой информации, которая может содержаться в действии.
есть лишний ) у getA)) и так далее, в примере