Firebase 捕获异常

Ern*_*Kev 5 javascript firebase typescript firebase-realtime-database

如果我想保存到 firebase 的数据无效,我有以下代码会在控制台中向我抛出一些 firebase 异常。我想捕获它并以受控方式将其显示在屏幕上,而不是从控制台中查找。我不知道为什么我的 .catch 没有捕获任何 firebase 异常?

this.databaseService.saveCodesToFirebase(jsonFromCsv)
  .then(result => {
    this.alertService.alertPopup('Success', 'Code Updated')
  })
  .catch(error => {
    this.errorMessage = 'Error - ' + error.message
  })


saveCodesToFirebase(myObj: Object) {
    let ref = firebase.database().ref();

    let path = this.userService.getCurrentUser().companyId + '/codes/'
    let lastUpdatedPath = this.userService.getCurrentUser().companyId + '/lastUpdated/';

    var updates = {}

    updates[path] = jobObject;
    updates[lastUpdatedPath] = Math.round(new Date().getTime() / 1000);

    return ref.child('codes').update(updates);
}
Run Code Online (Sandbox Code Playgroud)

例外:Firebase.update 失败:第一个参数在属性“codes.apple20170318.codes”中包含无效的键 ()。键必须是非空字符串,并且不能包含“.”、“#”、“$”、“/”、“[”或“]”

截屏

Jos*_*yol 5

这里没什么可说的,但我最好的猜测是,您传递给的对象的saveCodesToFirebase()键中包含点,就像错误消息中显示的那样:jobCodes.apple20170318.codes

如果您想保留此模型,则必须在执行操作之前清理该对象以替换其键(及其子键,递归地)中的任何无效字符update()

当涉及到捕获异常时,您必须使用 try/catch 块。在这种情况下,附加.catch()到 Promise 只对检测服务器返回的错误有用,但这里是方法update()本身同步抛出异常。

一种可能的方法是这样的:

try {
  this.databaseService.saveCodesToFirebase(jsonFromCsv)
    .then(result => {
      this.alertService.alertPopup('Success', 'Code Updated')
    })
    .catch(error => {
      this.errorMessage = 'Error - ' + error.message
    })
} catch (error) {
  this.errorMessage = 'Error - ' + error.message
}
Run Code Online (Sandbox Code Playgroud)

  • 我知道情况确实如此,而且很容易解决。但是,我的目标是能够通过某种 catch 语句以某种方式捕获此错误。 (2认同)