2017-01-31 7 views
3

私はRxJSを初めて使っています。私のアプリでは、私は繰延アクションの独立したキャンセルが必要です。 Here's動作例(遅延時間は3秒)。しかし、複数のアイテムを削除して1つをキャンセルすると、すべてのアイテムが一度にキャンセルされます。還元的に観測可能な独立したチェーン解除?

エピックコード:

const itemsEpic = action$ => 
    action$.ofType('WILL_DELETE') 
    .flatMap(action => 
     Observable.of({type: 'DELETE', id: action.id}) 
     .delay(3000) 
     .takeUntil(action$.ofType('UNDO_DELETE')) 
) 

私はidtakeUntilにオペレータに合格する必要があると思うが、私はどのように行うのか分かりません。

答えて

3

私がtakeUntilオペレータを正しく理解していれば、Observableが最初のアイテムを放出すると、それが呼び出されたObservableから新しいアイテムの放出を停止します。これを念頭に置いて、次のようなことができます:

const itemsEpic = action$ => action$.ofType('WILL_DELETE') 
    .flatMap(action => Observable.of({ type: 'DELETE', id: action.id }) 
    .delay(3000) 
    .takeUntil(action$.ofType('UNDO_DELETE').filter(({id}) => id === action.id)) 
) 
+1

あなたは完全に理解しているようです。これはまさにあなたがやることです。 – jayphelps

+0

このソリューションは、期待どおりに動作します。 ありがとうございます。 –

+0

@AndyPro彼は適切なクレジットを得られるように、回答を受け入れたものとしてマークしてください。 :) – jayphelps