Я немного смущен кодом ниже. Очевидно, что это функция с двумя стрелками, написанная в коде es6, но я не совсем понимаю некоторые части.
Второй параметр с именем done
— это пустая функция, которая ничего не делает? Или он выполняется с помощью простого return
в результате анонимной функции второй стрелки?
XXXX.load — это обещанная функция, которая возвращает некоторые результаты. Как вызывающая сторона Index
может получить результаты второго параметра done
, т.е. done(null, result)
?
Каков эквивалентный код в 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);
});
};
The 2nd parameter named done is an empty function that does nothing?
Это параметр. Он принимает любое значение, которое вы ему даете.
Значение По умолчанию, которое присваивается, если вызывающая программа не передает второй аргумент, является функцией, которая ничего не делает. Это позволяет вызывать ее без выдачи ошибки undefined не является функцией или без явного теста, чтобы увидеть, является ли она функцией или нет.
How the caller of the Index can get the results of the 2nd parameter done ie done(null, result) ?
Передав собственную функцию в качестве второго аргумента.
What is the equivalent code in 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);
});
}
};
Давайте по одному:
Index (name, done = () => {})
определяет значение по умолчанию для done
на случай, если при вызове Index
его не будет указано. Это помогает не выполнять никаких проверок в случае, если done
имеет значение null/undefined. Вы также можете написать это такconst Index = (name, done) => (dispatch, getState) => {
if (!done) {
done = () => {}
}
}
caller
просто передаст функцию в качестве второго аргумента при вызове Index
.Общее примечание: Index
на самом деле возвращает функцию, которая ожидает параметр dispatch
и/или getState
.
done
. Значения по умолчанию предотвращают сбои во время выполнения.2 и 3 можно понять, увидев ниже код: (просто запустите его и посмотрите console.
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.info({result});
done(result);
}).catch(function(error) {
console.info(error);
});
}
}
function doneImplementation(data) {
console.info('Data from done- ', data);
}
Index('', doneImplementation)();