如果我要保存到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'中包含无效的键()。钥匙必须是 非空字符串,不能包含"。","#"," $"," /" ," [",或"]"
答案 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
}