Запутанный синтаксис функции Javascript

Я немного смущен кодом ниже. Очевидно, что это функция с двумя стрелками, написанная в коде es6, но я не совсем понимаю некоторые части.

  1. Второй параметр с именем done — это пустая функция, которая ничего не делает? Или он выполняется с помощью простого return в результате анонимной функции второй стрелки?

  2. XXXX.load — это обещанная функция, которая возвращает некоторые результаты. Как вызывающая сторона Index может получить результаты второго параметра done, т.е. done(null, result)?

  3. Каков эквивалентный код в 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);
    });
};
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
36
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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);
            });

    }
};

Давайте по одному:

  1. Index (name, done = () => {}) определяет значение по умолчанию для done на случай, если при вызове Index его не будет указано. Это помогает не выполнять никаких проверок в случае, если done имеет значение null/undefined. Вы также можете написать это так
const Index = (name, done) => (dispatch, getState) => {
  if (!done) {
   done = () => {}
  }
 }
  1. caller просто передаст функцию в качестве второго аргумента при вызове Index.

Общее примечание: Index на самом деле возвращает функцию, которая ожидает параметр dispatch и/или getState.

Ответ принят как подходящий
  1. Пустая функция является значением по умолчанию для 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)();

Другие вопросы по теме