2016-09-30 6 views
0

Куда вторгается промежуточное ПО? Это порядок промежуточное программное что я вижу, это происходит через прямо сейчас, но я застревают на том, где Thunk приходит в:Как работает поток промежуточного программного обеспечения relux?

  1. депеш действие, которое имеет promise значение, установленное в истинно
  2. идет в санк, санк Безразлично» t делать что-либо с ним, потому что это объект, а не функция
  3. отправляется на обещаниеErrorMiddleware, которое получает хранилище от applyMiddlware и возвращает функцию.
  4. Эта функция перехвачена Thunk, хотя она была возвращена и не отправлена? который точно выполняет эту функцию, которая вернет следующую функцию с действием в качестве аргумента? кто затем запустит эту финальную функцию?

магазин

const store = createStore(
    rootReducer, 
    applyMiddleware(thunkMiddleware, promiseErrorMiddleware, dataTrafficMiddleware) 
) 

actionCreator

dispatch({url: requestURL, promise: true}) 

promiseErrorMiddleware & dataTrafficMiddleware

const promiseErrorMiddleware = function (store) { //where is store from, applyMiddleware? 
     return function (next) { //where is next from? 
     return function (action) { 
      if (!action.promise) { 
      return next(action) 
      } else { 
      return fetch(action.url).then(function (data) { 
       ... 
       next({data, needDirection: true}) 
      }) 
      } 
     } 
     } 
    } 

const dataTrafficMiddleware = function (store) { 
    return function (next) { 
    return function (action) { 
     if (!action.needDirection) { 
     return next(action) 
     } else { 
     //dispatch regular action with type and data 
     } 
     } 
    } 
    } 
} 
+0

Возможный дубликат [для чего нужно промежуточное ПО для async-потока в Redux?] (Http://stackoverflow.com/questions/34570758/why-do-we-need-middleware-for-async-flow-in- перевождь) – vijayst

ответ

0

Одна вещь, которую следует иметь в виду, заключается в том, что средние линии прикованы. Когда вы вызываете next(), он переходит к следующему промежуточному программному обеспечению в порядке, указанном вами в applyMiddleware(). В конце цепи промежуточного программного обеспечения действие проходит через редуктор (ы). В вашем коде функция никогда не проходит через промежуточное ПО thunk (начиная с thunk до promiseErrorMiddleware). С другой стороны, если вы выполните dispatch() действие, оно будет проходить через всю цепочку промежуточного программного обеспечения с самого начала.

Смежные вопросы