Бесконечный цикл при срабатывании эффекта с Ngrx - PullRequest
1 голос
/ 29 апреля 2019

Я новичок с использованием Rxjs и Ngrx , и у меня возникает проблема, что всякий раз, когда возникает ошибка аутентификации, отображается alert() с сообщением об ошибке, возвращенным изFirebase.

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

Когда я правильно ввожу адрес электронной почты и пароль, приложение ведет себя правильно ... Проблема возникает, когда возвращается ошибка Firebase.

Бесконечный цикл не происходит, если я несоздайте Effect() для AUTH_ERROR ... и я получаю сообщение об ошибке в состоянии просмотра приложения Redux DevTools .

@Effect()
    loginWithEmailPassword: Observable<Action> = this._actions.pipe(
        ofType(authActions.LOGIN_EMAIL_PASSWORD),
        map((action: authActions.LoginEmailPassword) => action.payload),
        switchMap(data => from(this._angularFireAuth.auth
            .signInWithEmailAndPassword(data.email, data.password)).pipe(
                switchMap(response => forkJoin([
                    from(response.user.getIdTokenResult(true)),
                    of(response.user)
                ])),
                map(([token, user]) => {

                    if (user) {
                        this._router.navigate(['']);

                        return new authActions.Authenticated({
                            admin: token.claims.admin,
                            profissional: token.claims.profissional,
                            assinante: token.claims.assinante,
                            firestoreCollection: token.claims.firestoreCollection,
                            user: user
                        });
                    }
                }),
                catchError((error) => of(new authActions.AuthError({ error: error })))
            ))
    )

    @Effect()
    authError$: Observable<Action> = this._actions.pipe(
        ofType(authActions.AUTH_ERROR),
        tap(action => alert(action.payload.error.message))
    )

1 Ответ

0 голосов
/ 29 апреля 2019

Чтобы решить эту проблему, я передал в качестве параметра отправки значение false.

 @Effect({ dispatch: false })
    authError$: Observable<Action> = this._actions.pipe(
        ofType(authActions.AUTH_ERROR),
        tap(action => alert(action.payload.error.message))
    )
...