Javascript Redux中间件无限循环?

Javascript Redux中间件无限循环?,javascript,redux,react-redux,Javascript,Redux,React Redux,在下面的代码片段中,我很难理解result=next(action)如何不是一个无限循环。因为“last function”action=>采用参数action,并基于采用next参数(next=>action=>)的函数计算结果值,然后再次调用采用action参数(next=>action=>)的函数 本质上,这段代码的递归性很难理解 import C from '../constants' import appReducer from './reducers' import { create

在下面的代码片段中,我很难理解
result=next(action)
如何不是一个无限循环。因为“last function”
action=>
采用参数
action
,并基于采用
next
参数(
next=>action=>
)的函数计算
结果
值,然后再次调用采用
action
参数(
next=>action=>)的函数

本质上,这段代码的递归性很难理解

import C from '../constants'
import appReducer from './reducers'
import { createStore, applyMiddleware } from 'redux'

const consoleMessages = store => next => action => {

    let result

    console.groupCollapsed(`dispatching action => ${action.type}`)
    console.log('ski days', store.getState().allSkiDays.length)
    result = next(action)

    let { allSkiDays, goal, errors, resortNames } = store.getState()

    console.log(`

        ski days: ${allSkiDays.length}
        goal: ${goal}
        fetching: ${resortNames.fetching}
        suggestions: ${resortNames.suggestions}
        errors: ${errors.length}

    `)

    console.groupEnd()

    return result

}

export default (initialState={}) => {
    return applyMiddleware(consoleMessages)(createStore)(appReducer, initialState)

next
不是某个函数的名称,而是参数名称

调用
next
不会调用
action=>{…}
函数

这里没有任何递归

重写代码可能会为您澄清一些事情:

function consoleMessages(store) {
  return function (next) {
    return function (action) {
      ...
      let result = next(action)
      ...
    }
  }
}

next
不是某个函数的名称,而是参数名称

调用
next
不会调用
action=>{…}
函数

这里没有任何递归

重写代码可能会为您澄清一些事情:

function consoleMessages(store) {
  return function (next) {
    return function (action) {
      ...
      let result = next(action)
      ...
    }
  }
}

谢谢因此,当一个“动作”发生时,它就会触发整个事件。当你给下一个“对象”动作时,它在做什么?控制台消息是否正在尝试显示当前正在发生的操作?添加action=>{..}函数的原因是否在于它具有执行异步函数的能力?因为您可能认为“result=next(action)”可以在同时接受next和action对象的函数中实现。不确定为什么最后一个函数是必需的。“下一个‘对象’在执行操作时会做什么?”
next
是一个函数。我不知道它是干什么的。请随意在
applyMiddleware
API中查找它。“添加action=>{..}函数的原因是它具有执行异步函数的能力吗?”我不太明白您在这里想问什么。我认为您不理解的是,
applyMiddleware
函数需要一个以某种方式运行的参数。这种行为的原因完全在于
applyMiddleware
函数,因此我建议您如果想了解其工作原理,请查看源代码。谢谢。因此,当一个“动作”发生时,它就会触发整个事件。当你给下一个“对象”动作时,它在做什么?控制台消息是否正在尝试显示当前正在发生的操作?添加action=>{..}函数的原因是否在于它具有执行异步函数的能力?因为您可能认为“result=next(action)”可以在同时接受next和action对象的函数中实现。不确定为什么最后一个函数是必需的。“下一个‘对象’在执行操作时会做什么?”
next
是一个函数。我不知道它是干什么的。请随意在
applyMiddleware
API中查找它。“添加action=>{..}函数的原因是它具有执行异步函数的能力吗?”我不太明白您在这里想问什么。我认为您不理解的是,
applyMiddleware
函数需要一个以某种方式运行的参数。这种行为的原因完全在于
applyMiddleware
函数,因此我的建议是,如果您想了解其工作原理,请查看源代码。