2016-10-13 9 views
0

私はredux-thunkを使用していますが、タイムアウトのあるアクションもディスパッチしたいと思っています。そのため、いくつかの理由で(iはオブジェクト内のすべてのタイムアウトをしたい、私はそれらをキャンセルすることができしたい、doesntのは本当に問題で今)私はReduxタイムアウトサンクエラー「アクションはプレーンなオブジェクトでなければなりません」

enchancerだけの特別発するカスタム「タイムアウトミドルウェア」と「アクションenchancer」を持つようにしたいですアクションの種類:

const addTimeoutToAction = (delay, action) => ({ 
    type: 'TIMEOUT' 
    , delay 
    , action 
}) 

ミドルウェアはちょうどそれをキャッチし、タイムアウトが

({dispatch, getState}) => next => action => { 
    if (action && action.type === 'TIMEOUT') { 
    setTimeout(() => { 
     dispatch(action.action); 
    }, action.delay) 
    } 
    next(action); 
} 

を終了した後、だから私の期待はミドルウェアでディスパッチ関数をtに戻ってアクションを送信することで、アクションを派遣すべきです彼はミドルウェアのチェーン、ここで再びすべてを通過し始めるでしょう。

私のサンプルコードは単純な動作で動作しますが、サクラアクションは動作しません。遅れたアクションをミドルウェアチェーンに戻す方法を理解するのを助けてください。

コード例:あなたはサンクミドルウェアを使用するたびに

http://codepen.io/Fen1kz/pen/zKadmL?editors=0010

答えて

0

あなたのコードは、この

const action3 =() => (dispatch, getState) => { 
    dispatch({ 
     type: 'action3' 
    }); 
} 

のようになります、あなたがオブジェクトを返すことができない、アクションをディスパッチするディスパッチを呼び出す必要があります。 http://codepen.io/anon/pen/pEKWRK?editors=0010

・ホープ、このことができます:ここで

を修正codepenです。

+0

ha。ハハ。ハハハッハッハ。その小さなエラーを例で修正したところ、私の心は溶け始めました。ハハ。私はこれらの30分すべてを費やして、プロジェクトで同じコードがどのように失敗したかを見て、この例で成功しています。 'createStore(reducer、Redux.compose(applyMiddleware(thunk)、applyMiddleware(timeouts))));)のようなストアの作成があることが判明しました。あなたがチェックしたい場合 - 私はcodepenを更新しました。だから今はcompose/applyMiddlewareを持っていて、あなたの解決策でも失敗します。 – Fen1kz

関連する問題

 関連する問題