Firebase 捕获异常

5

我有以下代码,如果我想要保存到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);
}

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

屏幕截图


请在“实时”数据库中提供有关您的数据模型的更多详细信息。 - Giridhar Karnik
@ErnieKev 我也遇到了同样的问题。你有没有找出如何克服它的方法?我甚至添加了一个外部全局 try-catch,但由于我在回调中有一些“update”调用,它仍然发生。难道唯一的方法就是到处放置 try-catch 吗?那 Firebase 的“catch”有什么用呢? - vir us
2个回答

5

这里没有太多线索,但我最好的猜测是你传给 saveCodesToFirebase() 的对象中包含有句点的键,就像在错误信息中显示的那个:jobCodes.apple20170318.codes

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

当涉及捕获异常时,您将需要使用 try/catch 块。在这种情况下,附加到承诺的 .catch() 仅有助于检测服务器返回的错误,但在这里,是 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
}

2
我知道这是可以轻松修复的情况。然而,我的目标是通过某个catch语句以某种方式捕获此错误。 - ErnieKev

0

因此,在Javascript中,您通常应该每个try语句只有一个catch子句。您可以使用以下语法实现所需的功能:

try {
 // some code 
} catch (err) {
    if( err istanceof FirebaseError ) {
        this.errorMessage = 'Error - ' + err.message;
    } else {
        this.errorMessage = 'Error - Generic error';
    }
}

你可以在这里找到更多信息,位于条件捕获块部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接