¿Qué hace este código con la lista de funciones?
store = {}; mw = [f1, f2, f3]; ds = mw.map(function (fn) { return fn.bind(null, store); }); ds2 = ds.reduceRight(function (dispatch, fn) { return fn.bind(null, dispatch); }); lo está combinando de alguna manera, pero no entiendo el objetivo. ¿Cuáles son los requisitos para las funciones f* ?
Las funciones originales se procesan dos veces con un valor de argumento: una vez con store y la segunda vez con una función de devolución de llamada dispatch , que a través reduceRight es una función que se refiere a la siguiente función procesada en la matriz.
Así que f* deberían ser funciones que toman dos argumentos: el objeto que desempeña un papel (para cualquier cosa que desee) y la función de devolución de llamada que se llamará a continuación. La excepción a esta regla es la última función: no recibe un segundo argumento.
Aquí hay un ejemplo para esas funciones:
function f1(store, dispatch) { store["f1"] = "I"; return dispatch(); } function f2(store, dispatch) { store["f2"] = "was"; return dispatch(); } function f3(store) { store["f3"] = "here"; return store; } var store = {}; var mw = [f1, f2, f3]; var ds = mw.map(function (fn) { return fn.bind(null, store); }); var ds2 = ds.reduceRight(function (dispatch, fn) { return fn.bind(null, dispatch); }); // ds2 is a function, that chains all given functions together // through the callback system that they implement: console.log(ds2());