2017-08-07 5 views
2

私はangularfire2を使ってAngularアプリを使っていますが、firebaseのいくつかの異なるテーブルから情報を削除するメソッドを使用しています。Observableの中に約束を返します

removeTeam(key: string) { 
    const dataToRemove = {}; 
    dataToRemove[`teams/${key}`] = null; 

    this.findMembersInTeam(key).subscribe(members => { 
     members.forEach(member => { 
     dataToRemove[`members/${member}/teams/${key}`] = null; 
     }); 

     this.sdkDB.update(dataToRemove); 
    }); 
    } 

だから、これは何をするか、基本的に/ //チーム/チームを削除する/しても、チーム内のすべてのメンバーのために、チームを削除し、その/メンバーを削除しています。

は私がやっていることは、チーム内のメンバーのリストを取得し、これをサブスクライブの内側に、観測可能であるように私は、「クエリ」を構成し、this.sdkDB.update(dataToRemove)

この最後の方法は、約束を返すとそれを実行し、それは私がメソッドremoveTeamの結果として返すものです、それを行う方法はありますか? subscribeの代わりに(flatMapはmergeMapの単なる別名である)、観察可能

import 'rxjs/add/operator/toPromise'; 

// ... 

removeTeam(key: string) { 
    const dataToRemove = {}; 
    dataToRemove[`teams/${key}`] = null; 
    return this.findMembersInTeam(key) 
       .toPromise() 
       .then(members => { 
        members.forEach(member => { 
         dataToRemove[`members/${member}/teams/${key}`] = null; 
        }); 
        return this.sdkDB.update(dataToRemove); 
       }); 
} 
+0

どのように 'removeTeam'を呼びますか?あなたはそれで何をしていますか? –

答えて

0

はこれを試してみてください。

これは、観察可能なストリームを結合します。

removeTeam(key: string) { 
    const dataToRemove = {}; 
    dataToRemove[`teams/${key}`] = null; 

    return this.findMembersInTeam(key) 
     .flatMap(members => { 
      members.forEach(member => { 
       dataToRemove[`members/${member}/teams/${key}`] = null; 
      }); 

      return this.sdkDB.update(dataToRemove); 
     }) 
     .toPromise(); 
    } 
+0

'sdkDB'がObservableを返す場合、これは動作しません。 – Lansana

+0

回答を更新しました – Faly

+0

sdkDBはPromiseを返しますが、これは動作しません。 .findMembersInTeam(キー)の後に.doを使用してデータが返され、動作していますが、.then()は実行されていません。 – David

3

sdkDB IFリターンをrxjs/add/operator/mergeMapをインポートし、flatMapまたはmergeMapを使用します。

おかげ

+0

sdkDB.updateは、観測可能なものではなく、プロミスを返します。 – David

+1

@David RxJS 5では、それは問題ではなく、ObservablesとPromisesは同じ方法で処理されます。 'flatMap'の代わりに' mergeMap'( 'flatMap'は単にエイリアスです)を使い、後で' removeTeam'のどこかで購読するかObservableを返します。 – martin

+0

しかし、私は観察可能なものを返そうとはしていない、私は約束を返すしたい。 私のインターフェースにはaddTeamとremoveTeamがあり、addTeamはPromiseを返すので、一貫性を保ち、removeTeamでもPromiseを返したいと思います。 – David

関連する問題