Firebase捕获异常

时间:2017-03-25 04:41:05

标签: javascript typescript firebase 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);
}
  

EXCEPTION:Firebase.update失败:第一个参数在属性' codes.apple20170318.codes'中包含无效的键()。钥匙必须是   非空字符串,不能包含"。","#"," $"," /" ," [",或"]"

screen shot

1 个答案:

答案 0 :(得分:2)

此处没有太多内容,但我最好的猜测是,您传递给saveCodesToFirebase()的对象的键中包含点,如错误消息中显示的那样:jobCodes.apple20170318.codes

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

在捕获异常时,您必须使用try / catch块。在这种情况下附加到promise的.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
}