Ответ
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.