2017-05-01 17 views
1

検索が完了したときにトリガーされる次の@ngrxエフェクトがあります。 SEARCH_COMPLETEイベントはコレクションの製品を出力します。@ngrx DBのコレクションに個々のアイテムを保存するには

コレクション内の各製品を、単一の値としてコレクション全体ではなく、IndexedDBに保存します。これを達成するために、@ngrx DBを使用する製品から新しいObservableを作成しました。私はlasoがそれを動作させるためにsubscribeコールを使用しなければならなかった。

私の質問は、これは正しい方法ですか?またはsubscribeメソッドを使用しないと良い方法ですか?

@Effect() 
addProductsToDB$: Observable<Action> = this.actions$ 
    .ofType(ProductsSearchActions.ActionTypes.SEARCH_COMPLETE) 
    .map((action: ProductsSearchActions.SearchCompleteAction) => action.payload) 
    .switchMap(products => { 
     return Observable.from(products as IProduct[]) 
      .do(product => { 
       this.db.insert('products', [{ product }]) 
        .subscribe(); 
      }) 
      .map(() => new ProductDBActions.ProductAddedSuccessAction(true)); 
    }); 
+1

Observable.from(products as IProduct[]) .switchMap(product=> this.db.insert('products', [{ product }])) .map(() => new ProductDBActions.ProductAddedSuccessAction(true)); 
試みをしよう。switchMap(産物=> this.db.insert( '製品'、[{}製品])).map(()=> new ProductDBActions.ProductAddedSuccessAction(true)); –

+0

あなたが提案したものを試してみましたが、うまくいきます。どうして '' 'subscribe''コールなしで動くのですか? –

+1

@wonderfulworld' switchMap'に暗黙の 'subscribe'が含まれているので動作します。 – cartant

答えて

1

「Observable.from(IProductなどの製品[])を行うため

関連する問題