2017-01-18 14 views
2

1回の操作でFirebase上で2つのノードを削除するために結合操作を実行します。私はノードの場所がある場合、ノードを削除するremove()があることを知っています。しかし、remove()操作の戻り値は何ですか?約束か観察可能なのか?他の削除操作を実行するか、削除操作が成功した(またはエラーがあります)コンポーネントに通知するために、削除操作が成功したことをどのように知ることができますか?AngularFire2またはFirebaseをAngular2で使用して複数の場所を「削除する」方法

例(AngularFireのヘルプを削除するマルチロケーションに助けを必要とする)提供:

constructor(private db:AngularFireDatabase, @Inject(FirebaseRef) fb) { 
    this.sdkDb = fb.database().ref(); 
} 

deleteTask(taskId: string, jobtypeId: string): boolen { 
const taskObservable = this.db.object('tasks' + '/' + taskId); 
const taskPerJobtypeObervable = this.db.object('tasksPreJobtype' + '/' + jobtypeId + '/' + taskId); 
taskObservable.remove() 
    .then(_ => { 
    console.log('success'); 
    taskPerJobtypeObervable.remove() 
     .then(_ => { 
     return ture 
     }); 
    }) 
    .catch(err => {console.log(err, 'You dont have access!'), return false}); 

} 

あなたは私がチェーンに私は本当に避けたい約束、として削除を必要と見ての通り。私はこれをobservableパターンにしたいのですがなぜ私はangularFire2を使用しますか?したがって、ブール値を返す代わりに、私は観察可能な値を返したいと思います。そして、私はこれを複数の場所の削除にしたいと思います。どうすればこのコードをリファクタリングできますか?どうもありがとうございます!

のアイデアは「ヌル」に両方の場所にupdate()を使用することであり、それはFirebaseにそれを取り除くします:フランクに

+3

約束を返しているようです:https://github.com/angular/angularfire2/blob/c3a954cd857fc297438f53d3a1e3bf69b6af01c2/src/database/firebase_list_observable.ts#L42。また、一つのマルチロケーション 'update()'コールを使用して、それらをすべて1回の呼び出しで削除することもできます。 https://firebase.googleblog.com/2015/09/introducing-multi-location-updates-and_86.html –

+0

迅速な共通点のためにフランクに感謝します!はい、それはangularFire remove()で約束を返します。しかし、これは複数の場所を持つ「削除」なので、もし私がこの約束を結ぶなら、それはかなり醜いように見えます。私はあなたが言及した "複数の場所の更新()"メソッドを使用したいと思います。しかしリンクには更新例しかありません。どうすれば削除できますか(私はノードを削除するために更新を使用することはできませんか?)これを明確にするための例を示しました。 –

+0

nullを投稿すると削除されます。ああ、私はあなたがすでにそれを見つけたのを見ます。 :-) –

答えて

3

おかげで、私は解決策を見つけたし、ここに解決策を共有すると思います。ここで

は、リファクタリングコードです:それと

deleteTask(taskId: string, jobtypeId: string): Observable<any> { 

    let dataToDelete = {}; 
    dataToDelete['tasks/' + taskId] = null; 
    dataToDelete['tasksPreJobtype/' + jobtypeId + '/' + taskId] = null; 

    return this.firebaseUpdate(dataToDelete); 
} 

firebaseUpdate(dataToSave) { 

    const subject = new Subject(); 

    this.sdkDb.update(dataToSave) 
    .then(
     val => { 
     subject.next(val); 
     subject.complete(); 
    }, 
    err => { 
     subject.error(err); 
     subject.complete(); 
    } 
    ); 

    return subject.asObservable(); 
} 

、私のコンポーネントを簡単にdeleteTaskを購読することができ、deleteTaskがtrueを返す唯一のオプションをリダイレクトするか、他のです。リアクティブプログラミングVSのパワーは約束します:)

関連する問題