<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Javascript</title>
    <description>The latest articles on Forem by Javascript (@javascriptbr).</description>
    <link>https://forem.com/javascriptbr</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1107%2F1f396487-396d-4dc6-af7a-099f37fc98f2.png</url>
      <title>Forem: Javascript</title>
      <link>https://forem.com/javascriptbr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/javascriptbr"/>
    <language>en</language>
    <item>
      <title>Callback's</title>
      <dc:creator>Telles (@UnicornCoder)</dc:creator>
      <pubDate>Thu, 22 Aug 2019 15:54:18 +0000</pubDate>
      <link>https://forem.com/javascriptbr/callback-s-1ccd</link>
      <guid>https://forem.com/javascriptbr/callback-s-1ccd</guid>
      <description>

&lt;p&gt;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.&lt;br&gt;
Bom mas como isso funciona, vou mostrar isso da maneira mais simples e como trabalhamos com as convenções de callback&lt;br&gt;
No MDN temos a seguinte definição:&lt;br&gt;
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.&lt;/p&gt;



&lt;p&gt;Show me the code!&lt;br&gt;
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?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Teremos algo nesse formato:&lt;/strong&gt;&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


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


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


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


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;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:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


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


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Ao rodarmos esse código teremos como resultado:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Meu Usuário { id: 1, nome: 'Diego Telles' }&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Regras do Callback:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Por padrão o parâmetro de callback sempre será passado por ultimo&lt;/li&gt;
&lt;li&gt;Sempre passamos primeiro o Erro e logo em seguida o Sucesso&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;É isso galera, espero que ajude a tirar algumas duvidas!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>callback</category>
    </item>
  </channel>
</rss>
