Estoy un poco confundido con el siguiente código. Obviamente es una función de dos flechas escrita en código es6 pero no entiendo exactamente algunas partes.
¿El segundo parámetro llamado done es una función vacía que no hace nada? ¿O se ejecuta con un simple return como resultado de la función anónima de la segunda flecha?
XXXX.load es una función de promesa que devuelve algunos resultados. ¿Cómo la persona que llama al Index puede obtener los resultados del segundo parámetro done , es decir done(null, result) ?
¿Cuál es el código equivalente en es5?
const Index = (name, done = () => {}) => (dispatch, getState) => { return XXXX.load() .then((result) => { dispatch({type:OK}); done(null, result); }) .catch((error) => { dispatch({type:ERROR}); done(error); }); };Vamos uno por uno:
Index (name, done = () => {}) define un valor predeterminado para done en caso de que no se proporcione ninguno cuando se llama a Index . Esto ayuda en el camino a no hacer ningún control en caso de que done sea nulo/indefinido. También podrías escribirlo así. const Index = (name, done) => (dispatch, getState) => { if (!done) { done = () => {} } }caller simplemente pasará una función como segundo argumento cuando llame a Index . Una nota general: Index en realidad devuelve una función que esperará un dispatch y/o un getState .
¿El segundo parámetro llamado done es una función vacía que no hace nada?
Es un parámetro. Toma cualquier valor que le des.
El valor predeterminado , que se asigna si la persona que llama no pasa un segundo argumento, es una función que no hace nada. Esto le permite ser llamado sin arrojar un error de función indefinido o tener una prueba explícita para ver si es una función o no.
¿Cómo la persona que llama al índice puede obtener los resultados del segundo parámetro hecho, es decir, hecho (nulo, resultado)?
Pasando su propia función como segundo argumento.
¿Cuál es el código equivalente en es5?
var Index = function(name, done) { if (!done) done = function() {}; return function(dispatch, getState) { return XXXX.load() .then(function(result) { dispatch({ type: OK }); done(null, result); }) .catch(function(error) { dispatch({ type: ERROR }); done(error); }); } };done . Los valores predeterminados evitan bloqueos en el tiempo de ejecución.2 y 3 se pueden entender al ver el siguiente código: (simplemente ejecútelo y vea las consolas.
const DEFAULT_FUNCTION_VALUE = ()=> {}; const XXXX = { load: function() { return new Promise(function(resolve, reject) { setTimeout(function() { resolve({data: 'from XXXX.load'}); },2000); }); } } const Index = function(name='', done=DEFAULT_FUNCTION_VALUE) { return function(dispatch, getState) { return XXXX.load().then(function(result) { console.log({result}); done(result); }).catch(function(error) { console.log(error); }); } } function doneImplementation(data) { console.log('Data from done- ', data); } Index('', doneImplementation)();