Какво е callback?

Какво е callback?
Photo by Annie Spratt / Unsplash

Callback е функция, която се предава като аргумент на друга функция и се извиква, когато първата функция приключи своето изпълнение.

В JavaScript, използването на callback функции е много често и се използва, когато е необходимо да се изчака завършването на определена операция, преди да продължи изпълнението на други операции. Пример за това е зареждането на файлове от диска, където трябва да се изчака завършването на операцията за зареждане на файл, преди да може да се продължи с друга операция.

Ето един пример за използване на callback функция в JavaScript:

function sayHello(name, callback) {
  console.log("Hello, " + name);
  callback();
}

function sayGoodbye() {
  console.log("Goodbye!");
}

sayHello("John", sayGoodbye);

В този пример функцията sayHello() приема два параметъра: name и callback. Първият параметър е името на човека, към когото ще бъде изписано "Hello", а вторият параметър е callback функцията, която ще бъде извикана след изпълнението на функцията sayHello(). В тази конкретна ситуация, след като е изписано "Hello, John", callback функцията sayGoodbye() се извиква и в конзолата се изписва "Goodbye!".

Друг пример за използване на callback функции, е при работа с асинхронни операции, като например зареждане на данни от уеб сървъри чрез AJAX заявки. В този случай, когато заявката за данни е изпратена, ние не знаем колко време ще отнеме за зареждане на данните и не искаме да блокираме изпълнението на кода до получаване на отговора от сървъра.

Ето един пример за използване на callback функция при AJAX заявки в JavaScript:

function loadData(url, callback) {
  var xhr = new XMLHttpRequest();
  xhr.open("GET", url, true);
  xhr.onload = function() {
    if (xhr.status === 200) {
      callback(xhr.responseText);
    }
  };
  xhr.send();
}

function displayData(data) {
  console.log(data);
}

loadData("https://example.com/data", displayData);

В този пример, функцията loadData() изпраща заявка за данни на URL адреса, предаден като първи аргумент. След като заявката е изпратена, се чака за отговор от сървъра, а когато отговорът е получен, се извиква callback функцията, която е предадена като втори аргумент на функцията loadData(). В конкретния случай, функцията displayData() просто изписва получените данни в конзолата.