2016-08-30 5 views
2

Der erste Chunk als Aktion Schöpfer unten funktioniert wie mit Thunk ist, aber ich möchte auch den zweiten Chunk anwenden, die ein Versprechen Middleware ist. Wie optimiere ich es, damit es 2 Aktionen versenden kann?reagieren Redux Middleware Versand 2 Aktionen

export const fetchPokemon = function (pokemonName) { 
    return function (dispatch) { 
    dispatch({type: 'REQUESTING'}) 
    const requestURL = `http://pokeapi.co/api/v2/pokemon/${pokemonName}/` 
    return fetch(requestURL) 
    .then(function (response) { 
     return response.json() 
    }) 
    .then(function (data) { 
     dispatch(receivePokemon(formatPokemonData(data))) 
     dispatch(fetchPokemonDescription(pokemonName)) 
    }) 
    } 
} 

Middleware

const fetchPromiseMiddleware = store => next => action => { 
    if (typeof action.then !== 'function') { 
    return next(action) 
    } 
    return Promise.resolve(action).then(function (res) { 
    if (res.status >= 400) { 
     throw new Error("Bad response from server") 
    } 
    return res.json() 
    }).then(store.dispatch) 
} 

ich die unten versucht habe aber einen Fehler:

store.js:33 Uncaught (in promise) TypeError: (0 , _actionCreators.receivePokemon) is not a function

const fetchPromiseMiddleware = store => next => action => { 
    if (typeof action.then !== 'function') { 
    return next(action) 
    } 
    return Promise.resolve(action).then(function (res) { 
    if (res.status >= 400) { 
     throw new Error("Bad response from server") 
    } 
    return res.json() 
    }).then(function (data) { 
    return store.dispatch(receivePokemon(formatPokemonData(data))) 
    }).then(function (data) { 
    return store.dispatch(fetchPokemonDescription(data.name)) 
    }) 
} 
+0

Können Sie den Rest Ihrer Aktionen zeigen? –

Antwort

0

es in Ihrer Frage nicht genug Code, aber es scheint, wenn Sie anrufen receivePokemon(formatPokemonData(data)) in dem Code, den Sie zeigen, receivePokemon ist keine Funktion, jetzt müssen Sie überprüfen, wo ist das definiert, es ist wahrscheinlich nicht.

Verwandte Themen