Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用ngrx效果捕捉Firebase身份验证错误_Javascript_Angular_Firebase_Firebase Authentication_Ngrx - Fatal编程技术网

Javascript 使用ngrx效果捕捉Firebase身份验证错误

Javascript 使用ngrx效果捕捉Firebase身份验证错误,javascript,angular,firebase,firebase-authentication,ngrx,Javascript,Angular,Firebase,Firebase Authentication,Ngrx,我正在从事angular5/firebase/ngrx项目,在注册过程中发现错误时遇到问题 如果我使用我知道已在系统中的电子邮件提交注册表单,我会在控制台中收到以下错误: 邮政400() 我的特效捕捉到以下错误“邮件地址已被另一个帐户使用。”并发送signupErrorAction() 但是,如果我立即重新提交表格,请求将不会出现在任何地方。该调用从未访问我的效果文件或我的身份验证服务。我必须刷新页面才能再次接到工作电话 就我所能缩小的范围而言,400 POST错误导致了一个问题。我将发布一些代

我正在从事angular5/firebase/ngrx项目,在注册过程中发现错误时遇到问题

如果我使用我知道已在系统中的电子邮件提交注册表单,我会在控制台中收到以下错误: 邮政400()

我的特效捕捉到以下错误“邮件地址已被另一个帐户使用。”并发送
signupErrorAction()

但是,如果我立即重新提交表格,请求将不会出现在任何地方。该调用从未访问我的效果文件或我的身份验证服务。我必须刷新页面才能再次接到工作电话

就我所能缩小的范围而言,400 POST错误导致了一个问题。我将发布一些代码,我可以使用任何人可能有的任何建议。如果你需要更多信息,请告诉我

我的身份验证服务

public registerWithEmail(payload: any): Promise<any> {
    console.log('signup called');
    return this.afAuth.auth.createUserWithEmailAndPassword(payload.email, 
      payload.password);
}
更新:我试过了,但出现了各种各样的错误

    @Effect()
public register: Observable<Action> = this.actions$
    .ofType(actions.ActionTypes.SIGN_UP)
    .pipe(
    map((action: actions.SignUpAction) => action.payload),
    switchMap(payload => this.authService.registerWithEmail(payload)
        .pipe(
        map(data => new actions.SignUpSuccessAction({ user: data.user })),
        catch(error => Observable.of(new actions.SignUpErrorAction({ error: error })))
        )
    );
谢谢
PK

您需要在
开关映射
中执行
捕获错误
(或
捕获
),以便外部可观测对象不会因错误而取消

@Effect()
public register: Observable<Action> = this.actions$
    .ofType(actions.ActionTypes.SIGN_UP)
    .map((action: actions.SignUpAction) => action.payload)
    .switchMap(payload => this.authService.registerWithEmail(payload)
      .map(data => new actions.SignUpSuccessAction({ user: data.user }))
      .catch(error => Observable.of(new actions.SignUpErrorAction({ error: error }))
    )
);
要使其正常工作,您需要添加新的导入:

import { map, switchMap, catchError } from 'rxjs/operators';

这将生成语法错误:“void”类型的“this”上下文不可分配给“Observable”类型的方法“this”@Effect()public register:Observable=this.actions$of type(actions.ActionTypes.SIGN_UP).pipe(map((action:actions.SignUpAction)=>action.payload));您使用的是什么版本的rxjs?当您使用可管道操作符时,您需要更新导入。“rxjs”:“6.1.0”,“rxjs compat”:“^6.0.0-rc.0”,我在上面添加了我的rxjs导入
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/switchMap';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/delay';
import 'rxjs/add/operator/do';
import "rxjs/add/operator/debounceTime";
import 'rxjs/add/observable/fromPromise'; 
import 'rxjs/add/observable/of';
@Effect()
public register: Observable<Action> = this.actions$
    .ofType(actions.ActionTypes.SIGN_UP)
    .map((action: actions.SignUpAction) => action.payload)
    .switchMap(payload => this.authService.registerWithEmail(payload)
      .map(data => new actions.SignUpSuccessAction({ user: data.user }))
      .catch(error => Observable.of(new actions.SignUpErrorAction({ error: error }))
    )
);
@Effect()
public register: Observable<Action> = this.actions$
    .ofType(actions.ActionTypes.SIGN_UP)
    .pipe(
      map((action: actions.SignUpAction) => action.payload),
      switchMap(payload => this.authService.registerWithEmail(payload)
        .pipe(
          map(data => new actions.SignUpSuccessAction({ user: data.user })),
          catchError(error => Observable.of(new actions.SignUpErrorAction({ error: error })))
        )
      )
    );
import { map, switchMap, catchError } from 'rxjs/operators';