DEV Community

Telles (@UnicornCoder) for Javascript

Posted on

4 3

Callback's


Quando falamos em callback, acredito que talvez seja uma coisa um pouco confusa na maioria das definições o callback é uma função chamar outra função para trazer o resultado da função final.
Bom mas como isso funciona, vou mostrar isso da maneira mais simples e como trabalhamos com as convenções de callback
No MDN temos a seguinte definição:
Uma função callback é uma função passada a outra função como argumento, que é então invocado dentro da função externa para completar algum tipo de rotina ou ação.


Show me the code!
Vamos imaginar um cenário onde temos uma function que vai retornar um objeto com um nome de usuário e um id, essa function vai simular como se estivessemos fazendo uma requisição de uma API, certo?

Teremos algo nesse formato:

function obterUser(){
/* Chamamos o setTimeout somente para trazer o nosso
objeto e podermos manipular o tempo dessa execução
*/
setTimeout(() => {
return {
id: 1,
nome: 'Diego Telles',
}
}, 1000);
}
view raw exemple.js hosted with ❤ by GitHub

Se a gente quiser executar essa function ela vai trazer um resultado undefined devido ao escopo que esta sendo executado essa function.
Ai que usamos as famosas chamadas callbacks e vamos seguir a sua convenção.
Vamos entender o como o callback se comporta:
Na função de callback passamos 2 parâmetros, primeiro passamos o Error e logo em seguida nosso Success, dentro dessa função teremos nosso console.log().

function obterUser(){
setTimeout(() => {
return {
id: 1,
nome: 'Diego Telles',
}
}, 1000);
}
function meuCallback (resultado){
console.log('Meu Usuário', resultado)
}

Mas se executarmos ele não vai acontecer nada, porque precisamos passar a chamada desse callback na function obterUser(), nosso código ficará assim:

function obterUser(callback){
setTimeout(() => {
return callback(null, {
id: 1,
nome: 'Diego Telles',
})
}, 1000);
}
function meuCallback (error, resultado){
console.log('Meu Usuário', resultado)
}

Legal! E assim meu código vai compilar e trazer meu resultado? A resposta é não, porque precisamos de mais uma function para chamar a função e trazer nosso resultado:

// Nosso parâmetro de callback (que pode ser outro nome da sua preferência)
function obterUser(callback){
setTimeout(() => {
// Passamos null como erro e o return é nosso success
return callback(null, {
id: 1,
nome: 'Diego Telles',
})
}, 1000);
}
// Nossa função de callback com os parametros "error e sucesso"
function meuCallback (error, resultado){
// log do nosso resultado
console.log('Meu Usuário', resultado)
}
/* Essa function vai fazer a chamada inicial e fazer com
que nosso callback funcione e o console.log mostre nosso resultado
*/
obterUser(meuCallback)
view raw chamada.js hosted with ❤ by GitHub

O que acontece aqui é o chamado Hoisting que faz com que nossa função "obterUser(meuCallback)" seja executada primeiro pela engine do JavaScript.
Para nossa tratativa de erro podemos fazer o seguinte na nossa função de obterUser():

obterUser(function meuCallback(error, reusltado){
// Se nosso retorno for igual a:
// null || " " || 0 === false
if(error){
console.log('Deu Ruim', error)
return;
}
console.log('Meu Usuário', reusltado)
})
view raw error.js hosted with ❤ by GitHub

Ao rodarmos esse código teremos como resultado:

Meu Usuário { id: 1, nome: 'Diego Telles' }

Regras do Callback:

  • Por padrão o parâmetro de callback sempre será passado por ultimo
  • Sempre passamos primeiro o Erro e logo em seguida o Sucesso

É isso galera, espero que ajude a tirar algumas duvidas!

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

Top comments (0)

nextjs tutorial video

Youtube Tutorial Series

So you built a Next.js app, but you need a clear view of the entire operation flow to be able to identify performance bottlenecks before you launch. But how do you get started? Get the essentials on tracing for Next.js from @nikolovlazar in this video series 👀

Watch the Youtube series

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay