2016-10-13 1 views
0

Ich benutze Redux-Thunk und ich möchte auch einige Aktionen mit Timeout versenden. Wegen einiger Gründe (ich will alle Timeouts in einem Objekt, ich in der Lage möchte, dass sie abbrechen, tut wirklich wichtig, jetzt) Ich möchte haben custom ‚Timeout-Middleware‘ und ‚Aktion Enchancer‘Redux Timeout Thunk-Fehler "Aktionen müssen einfache Objekte sein"

Enchancer nur spezielle emittiert Art der Aktion:

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

Middleware fängt es gerade und sollten Maßnahmen Versand nach Timeout

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

So ist meine Erwartung, dass Dispatch-Funktion in der Middleware-Aktion sendet zurück zu t Die Middleware-Kette, in der alles wieder durchläuft.

Mein Beispielcode funktioniert mit einfacher Aktion, thunked Aktion ist jedoch nicht. Bitte hilf mir zu verstehen, wie man die verzögerte Aktion zurück in die Middleware-Kette umlenkt.

Beispielcode:

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

Antwort

0

Sie Code wie dieser

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

aussehen sollte Wenn Sie thunk Middleware verwenden, müssen Sie Vermittlungsrufprozessor Aktionen zu versenden, können Sie ein Objekt nicht zurück. Hier

ist die korrigierte codepen: http://codepen.io/anon/pen/pEKWRK?editors=0010

Hoffnung, das hilft.

+0

ha. Haha. hahahaha. Mein Verstand begann zu schmelzen, als ich diesen kleinen Fehler im Beispiel reparierte und es funktionierte. Haha. Ich habe all diese 30 Minuten damit verbracht, nur zu beobachten, wie der gleiche Code in meinem Projekt fehlschlägt und in dem Beispiel erfolgreich ist. dann habe ich, dass ich Shop-Erstellung wie 'createStore (Reducer, Redux.compose (applyMiddleware (Thunk), applyMiddleware (Timeouts)));' das war das Problem. Für den Fall, dass Sie überprüfen möchten - ich habe CodePen aktualisiert, so jetzt hat es Compose/applyMiddleware und es scheitert sogar mit Ihrer Lösung. – Fen1kz

Verwandte Themen