2017-03-25 19 views
1

firebaseに保存したいデータが無効な場合、コンソールにfirebase例外がスローされています。 私はコンソールから見つけ出すのではなく、それをキャッチして制御された方法で画面に表示したいと思っています。 私の.catchがfirebaseの例外をキャッチしていない理由を知りませんか?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' で無効なキーを()が含まれています。キーは

screen shot

+0

は '実際のtime' DBにおけるデータモデルの詳細を提供します。 –

答えて

1

はありません "["、または "]" 非空の文字列である必要があり、含めることはできません ""、 "#"、 "$"、 "/"、ここに続けるのが一番良いと思いますが、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 
} 
+0

私はこれが事実であり、簡単に解決できることを知っています。しかし、ここでの私の目標は、何らかのcatchステートメントによってこのエラーを何とか捕まえることができるようにすることです。 – ErnieKev

+0

申し訳ありませんが、私はその部分を逃しました。私は答えを更新しました。 –