2017-06-18 5 views
1

をキャッチしていないので、私はAngularFire2(バージョン4.0.0-rc.1)を使用して開始し、この問題に引っかかっ:

getWishlist$(): FirebaseListObservable<{}> { 
    return <FirebaseListObservable<{}>>this.store.select(getFirebaseUID) 
     .filter(res => res.isAuthenticated) 
     .map(res => res.UserUUID) 
     .switchMap(uid => this.db.list(`/wishlist/${uid}/products`)); 
    } 

のでswitchMap演算子の後にそれが本来の私を返す必要がありますFirebaseListObservableであるthis.db.list()から観測されますが、それは起こらず、実行時に次のコードにエラーがあります。

this.accountService.getWishlist$().$ref 
    .orderByChild('pk').equalTo(designer.pk).once('value', (data) => { 
     if (!data.exists()) { 
     this.accountService.getWishlist$().push(designer); 
     } 
    }) 

とエラーです:

Cannot read property 'orderByChild' of undefined 

私が間違ってやっていますか?

答えて

2

私はrepo issue経由で依頼された同様の質問答え:

switchMapではない - とRxJS、一般的に - 作品。演算子によって返される観測値は、演算子が呼び出される観測値に依存します。前記観察可能なオブジェクトは、liftを実装して、同じタイプの観察可能なインスタンスを返すことができる。

AngularFire2がliftを実装観測 - あなたのswitchMap呼び出しから返されることに観察がされたことが観察されるが、それはあなたが説明している状況で違いはありません、...

- herehereを見ますthis.store.selectから持ち上げられました - this.db.listからではありません。

+0

私はあなたのリンクを提供するように私の質問を拡張しています。状況に何も変わらない.switch()演算子を呼び出すと、決してサブスクリプションをしなかったので、$ refは未定義です。あれは正しいですか?ですから、私が正しく理解していれば、.map()を購読してFirebaseList/ObjectObservableを受け取ってComponentクラスに結びつけるほうが良いです。サービスに私の論理がもっとあると期待しているので、ちょっと悲しいです。 – galuszkak

+0

'subscribe'の呼び出しがなければ何も起こりません。オリジナルの 'getWishlist $'メソッドを見れば、 'subscribe'なしでは動作しないことは明らかです。これは、ストアからの' UID'を取得し、それを使ってFirebase refを作成するために使用します。 AngularFire2リスト - 戻り値がrefを含むオブジェクトであることは不可能です。 – cartant