2017-01-31 6 views
0

私は角度2のプロジェクトにAngularFire2を使用しています。私forms.service.tsインサイド AngularFire2設定値のコールバック

が、私は

saveToFirebase(bug: MyBugs) { 

    const bugRef = this.af.database.object('/bugs'); 

    bugRef.set(bug) 
} 

そして、私のapp.component.ts内firebaseするために保存するには、次のしている、私は私がいることがわかります

this.formsService.saveToFirebase(bug); 

を持っている私firebaseはデータを保存することができました。しかし、私は、プロセスの中に何らかの種類のアクティビティインジケータを表示できるように、リクエストのステータス(成功、失敗、タイムアウト?)をコールバックしたいと思います。あなたのサービスメソッドから言った約束を返すので、もし私が、私はsaveToFirebaseを(呼び出し私のapp.componentファイル)

答えて

1

set returns a promiseの内側にこれを実行したいと思います:

saveToFirebase(bug: MyBugs): Promise<void> { 
    const bugsObject = this.af.database.object('/bugs'); 
    return bugsObject.set(bug); 
} 

それは次のように呼び出すことができます。

this.formsService 
    .saveToFirebase(bug) 
    .then(() => console.log('done!')) 
    .catch(error => console.log(error)); 

は、あなたが使用したデータベースのパスが bugsという名前が付けられていることを考えると、あなたは、単一のバグを追加するように見えること、それは listpushあなたが探しているものであることを可能性があります。

pushメソッドは親キーに子を追加し、プッシュキー(いくつかのランダムデータとタイムスタンプの組み合わせ - キーが時間でソートされるように)を生成します。それはプッシュキーを得ることができる「thenable」データベースref(すなわちPromise)を返します。

あなたはこのような何かを行うことができます:

saveToFirebase(bug: MyBugs): Promise<string> { 
    const bugsList = this.af.database.list('/bugs'); 
    const result = bugsList.push(bug); 
    return result.then(() => result.key) as Promise<string>; 
} 

次のように呼び出すことができます。それは、サービスのに利用できるように

this.formsService 
    .saveToFirebase(bug) 
    .then((key: string) => console.log('pushed: ' + key)) 
    .catch(error => console.log(error)); 

上記の例では、プッシュキーへの約束を解決します発信者。

+0

ありがとうございました。この場合にエラーが発生したかどうかはどのようにわかりますか? – user172902

+0

あなたは 'catch'を使います。私は答えを更新しました。 – cartant

+0

実際には、 'set'は' firebase.Promise 'を返します。これはちょっと面倒ですが、キャストすることは安全です:' return bugRef.set(bug)as Promise ; ' – cartant

関連する問題