我正在实现一个与Firebase集成的Angular应用程序,并试图在用户使用不正确的凭据登录时处理错误:
@Injectable({
providedIn: 'root',
})
export class UserService {
constructor(private router: Router, private firebaseAuthService: AngularFireAuth) {
this.firebaseAuthService.setPersistence('session');
}
login(email: string, password: string) {
this.firebaseAuthService
.signInWithEmailAndPassword(email, password)
.then(() => this.router.navigateByUrl('foo'))
.catch(() => console.log('error handled'));
}
}
字符串
catch方法成功地“处理”了错误,但是,在此之后,我仍然以一个未捕获的异常结束。
控制台输出:
错误处理
错误FirebaseError:Firebase:没有与此标识符对应的用户记录。用户可能已被删除。(auth/user-not-found). at错误内部(index-e3 d5 d3 f4.js:497:41)at _fail(index-e3 d5 d3 f4.js:468:11)at index-e3 d5 d3 f4.js:911:17在Generator.next()在PencGeneratorStep(jsctoGenerator. js:3:1)at _next(jsctoGenerator.js:22:1)at _ZoneDelegate. invoke(zone. js:372:26)at Object. ongluke(core.mjs:24210:33)at _ZoneDelegate.invoke(zone.js:371:52)at Zone.run(zone.js:134:43)
我尝试过以下方法:
- 将其转换为一个可观察值,并在观察者误差方法中处理误差
- 将其转换为observable,并使用rxjs的catchError处理错误
- 使用传统的try-catch(当然也使用await)
所有这些方法都以上面提到的相同结果结束(代码在catch块中运行,然后出现未捕获的异常)。
旁注:我在SO(zone.js promises returning Unhandled Promise Rejection error even with catch blocks)和Github(https://github.com/angular/angular/issues/31680)上也发现了类似的问题,它描述了相同的错误,并且在Github问题中提到了PR,但不幸的是没有解决问题。我已经尝试了zoneJS标志,但PR唯一的区别是错误现在被解开了。
1条答案
按热度按时间3wabscal1#
在你的catch块中,你会收到一个异常对象,它可以被处理和采取行动,在这种情况下,我已经构建和枚举来解释屏幕上的错误:
字符串