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