Что такое callback-функция?

«Что такое callback-функция?» — вопрос из категории JavaScript, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Callback-функция (функция обратного вызова) — это функция, которая передаётся в другую функцию в качестве аргумента и выполняется внутри неё после завершения какой-либо операции (часто асинхронной).

Основная идея: Позволить функции-получателю выполнить наш код в нужный момент.

Пример асинхронного callback в JavaScript:

// Функция, имитирующая асинхронный запрос данных
function fetchUserData(userId, callback) {
  setTimeout(() => {
    const data = { id: userId, name: 'Иван Иванов' };
    callback(null, data); // Первый аргумент — ошибка (null), второй — данные
  }, 1000);
}

// Использование: передаём callback для обработки результата
fetchUserData(42, (error, user) => {
  if (error) {
    console.error('Ошибка:', error);
  } else {
    console.log('Данные пользователя:', user);
  }
});

Применение в тестировании:

  • Тестирование асинхронного кода: В тестовых фреймворках (Jest, Mocha) callback'и исторически использовались для сигнализации о завершении асинхронного теста через вызов done().
    test('загружает данные пользователя', (done) => {
      fetchUserData(42, (err, data) => {
        expect(data.id).toBe(42);
        done(); // Сообщаем фреймворку, что тест завершён
      });
    });
  • Обработка событий в UI-тестах: Например, ожидание клика на элементе в Puppeteer или Playwright.
  • Паттерн "Callback Hell" (Ад обратных вызовов): Чрезмерная вложенность callback'ов усложняет чтение и поддержку кода. Эта проблема привела к появлению Promises и async/await.