Funções de callback


Funções de callback são aquelas passadas como argumentos para outras funções e executadas após concluir a execução da função principal.

Elas são frequentemente utilizadas em situações assíncronas, como operações de leitura/escrita de arquivos, requisições de rede ou temporizadores, onde é necessário aguardar a conclusão de uma operação antes de realizar outra.

Exemplo

Considere o seguinte exemplo:

function rand(min = 1000, max = 3000) {
  const num = Math.random() * (max - min) + min;
  return Math.floor(num);
}
 
function f1(callback) {
  setTimeout(function () {
    console.log("f1");
    if (callback) callback();
  }, rand());
}
 
function f2(callback) {
  setTimeout(function () {
    console.log("f2");
    if (callback) callback();
  }, rand());
}
 
function f3(callback) {
  setTimeout(function () {
    console.log("f3");
    if (callback) callback();
  }, rand());
}
 
f1(function () {
  f2(function () {
    f3(function () {
      console.log("Olá mundo!");
    });
  });
});

Neste exemplo, f1, f2 e f3 são funções assíncronas simuladas, e cada uma delas recebe uma função de callback como parâmetro. O código finaliza com uma chamada encadeada de f1, f2, f3 e, finalmente, uma função de callback que imprime “Olá mundo!“.

Nota

O encadeamento excessivo de funções de callback é denominado de Callback Hell, sendo considerado uma má prática de programação.

Referências