如何使用Thunk 函数实现中间件处理数据

2017-07-17  本文已影响42人  码农随想录

前言


因为研究redux源码,所以学习了redux源码使用Thunk 函数实现中间件处理数据,并写了个小demo和理解

demo代码


//中间件1
function fun1(dispatch) {
        return function(num) {
            console.log('fun1:---前', num);
            console.log('dispatch--1: ', dispatch);
            dispatch(num);
            console.log('fun1:---后', num);
        }
    }
//中间件2
function fun2(dispatch) {
        return function(num) {
            console.log('fun2:---前', num);
            console.log('dispatch--2: ', dispatch);
            dispatch(num)
            console.log('fun2:---后', num);
        }
    }

function compose(...funcs) {
  if (funcs.length === 0) {
    return arg => arg
  }

  if (funcs.length === 1) {
    return funcs[0]
  }

  return funcs.reduce((a, b) => (...args) => a(b(...args)))
}

var num = compose(fun1,fun2)(function(num) { console.log(num) });

num(456)

运行结果


运行结果

个人理解


1、 var num = compose(fun1,fun2)(function(num) { console.log(num) });
function(num) { console.log(num) }作为参数传给fun2,然后返回的function作为参数返回给fun1,fun1返回的function赋值给num

2、num(456)
456作为参数传给fun1返回的function,然后fun1 中的dispatch(num);会将456传给fun2返回的function,fun2中的dispatch(num)相当于执行function(num) { console.log(num) },从而实现fun1,fun2中间件处理数据

上一篇下一篇

猜你喜欢

热点阅读