<?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>DEV Community: João Gabriel</title>
    <description>The latest articles on DEV Community by João Gabriel (@joao3g).</description>
    <link>https://dev.to/joao3g</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%2Fuser%2Fprofile_image%2F1269582%2Fc1efc150-63e8-4abc-8c2d-315a755c8294.jpeg</url>
      <title>DEV Community: João Gabriel</title>
      <link>https://dev.to/joao3g</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/joao3g"/>
    <language>en</language>
    <item>
      <title>Entendendo o uso de async/await com Promises no Javascript.</title>
      <dc:creator>João Gabriel</dc:creator>
      <pubDate>Sun, 03 Mar 2024 16:31:51 +0000</pubDate>
      <link>https://dev.to/joao3g/entendendo-o-uso-de-asyncawait-com-promises-no-javascript-3ehp</link>
      <guid>https://dev.to/joao3g/entendendo-o-uso-de-asyncawait-com-promises-no-javascript-3ehp</guid>
      <description>&lt;h2&gt;
  
  
  Entendendo Promises em JavaScript
&lt;/h2&gt;

&lt;p&gt;As Promises são um recurso fundamental em JavaScript para lidar com operações assíncronas, elas representam um valor que pode estar futuramente ou nunca (caso a promise retorne um erro). No contexto de desenvolvimento web, são frequentemente utilizadas para lidar com solicitações de rede, acesso a bancos de dados e outras operações que levam tempo para serem concluídas.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que são Promises?
&lt;/h2&gt;

&lt;p&gt;Em termos simples, uma Promise é um objeto que representa o sucesso ou a falha de uma operação assíncrona. Ela possui três estados possíveis:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pendente&lt;/strong&gt;: Estado inicial, quando a Promise está aguardando o resultado da operação.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resolvida (Fulfilled)&lt;/strong&gt;: Quando a operação é concluída com sucesso.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rejeitada (Rejected)&lt;/strong&gt;: Quando a operação falha.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Quando as Promises são utilizadas?
&lt;/h2&gt;

&lt;p&gt;Promises são comumente utilizadas em situações em que uma operação assíncrona precisa ser realizada, como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requisições HTTP para recuperar dados de APIs.&lt;/li&gt;
&lt;li&gt;Acesso a bancos de dados.&lt;/li&gt;
&lt;li&gt;Leitura e escrita de arquivos.&lt;/li&gt;
&lt;li&gt;Qualquer operação que envolva tempo de espera, como setTimeout.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Uso do async/await
&lt;/h2&gt;

&lt;p&gt;O &lt;code&gt;async/await&lt;/code&gt; é uma sintaxe introduzida no ECMAScript 2017 (também conhecido como ES8) para facilitar o trabalho com Promises. Ele permite escrever código assíncrono de forma mais síncrona, tornando-o mais legível e fácil de entender.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Antes do ES8 introduzir a sintaxe do async/await, as promises eram utilizadas através do método &lt;code&gt;.then()&lt;/code&gt;, e os erros captados através do método &lt;code&gt;.catch()&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Exemplo de uso de uma Promise com async/await
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Função que retorna uma Promise que resolve após um certo tempo&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;esperar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Função assíncrona que utiliza o async/await&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;exemploAsyncAwait&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Iniciando operação assíncrona...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;esperar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Espera 2 segundos&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Operação assíncrona concluída!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Chamada da função assíncrona&lt;/span&gt;
&lt;span class="nf"&gt;exemploAsyncAwait&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neste exemplo, a função &lt;code&gt;esperar&lt;/code&gt; retorna uma Promise que resolve após o número especificado de milissegundos. A função &lt;code&gt;exemploAsyncAwait&lt;/code&gt; utiliza o &lt;code&gt;await&lt;/code&gt; para aguardar a conclusão da Promise retornada por &lt;code&gt;esperar&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;As Promises e o &lt;code&gt;async/await&lt;/code&gt; são recursos poderosos que tornam o código assíncrono em JavaScript mais fácil de escrever e entender. Elas são essenciais em todo o desenvolvimento que envolva o JavaScript como linguagem de programação, podendo ser utilizadas em qualquer tipo de chamada assíncrona.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>learning</category>
      <category>promises</category>
    </item>
    <item>
      <title>Principais métodos de array no Javascript (filter, map e reduce).</title>
      <dc:creator>João Gabriel</dc:creator>
      <pubDate>Sat, 17 Feb 2024 18:38:01 +0000</pubDate>
      <link>https://dev.to/joao3g/principais-metodos-de-array-no-javascript-filter-map-e-reduce-2991</link>
      <guid>https://dev.to/joao3g/principais-metodos-de-array-no-javascript-filter-map-e-reduce-2991</guid>
      <description>&lt;p&gt;O javascript é uma linguagem comumente utilizada por desenvolvedores independente de stack ou sênioridade, justamente pelo fato de ser muito flexível e principalmente por ser uma linguagem que funciona nativamente em todos os navegadores.&lt;/p&gt;

&lt;p&gt;Como toda linguagem de programação, javascript possui &lt;code&gt;Arrays&lt;/code&gt; que, no JS, podem armazenar dados de diferentes &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures"&gt;dataTypes&lt;/a&gt;. Embora não seja um dos &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Primitive"&gt;dataTypes primitivos&lt;/a&gt;, o &lt;code&gt;Array&lt;/code&gt; é um &lt;code&gt;Object&lt;/code&gt; como qualquer outro, mas que herda alguns métodos e propriedades do &lt;code&gt;Array.prototype&lt;/code&gt;, nesse post você verá sobre alguns dos métodos comumente utilizados em &lt;code&gt;Arrays&lt;/code&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
.filter();&lt;/li&gt;
&lt;li&gt;
.map();&lt;/li&gt;
&lt;li&gt;
.reduce();&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a id="filter"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Método filter:
&lt;/h2&gt;

&lt;p&gt;O método filter, como o próprio nome diz, serve para filtrar os dados presentes em um Array. O método recebe como parâmetro uma função de callback que é executada uma vez para cada elemento dentro do Array que foi chamado. O retorno do método é um novo Array com somente os itens que passaram no filtro, caso a função de callback retorne &lt;code&gt;true&lt;/code&gt; o elemento é mantido no Array de retorno da função filter, por outro lado, caso a função de callback retorne &lt;code&gt;false&lt;/code&gt; para o elemento em questão, ele é eliminado do Array de retorno da função filter.&lt;/p&gt;

&lt;p&gt;Vamos ver no exemplo abaixo uma utilização do método filter na prática:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgvvbum02a1qax85lex25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgvvbum02a1qax85lex25.png" alt="Trecho de código explicando o método filter" width="800" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repare que no exemplo acima foi passado como parâmetro do método uma &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions"&gt;Arrow Function&lt;/a&gt; que retorna &lt;code&gt;true&lt;/code&gt; para elementos que sejam do tipo &lt;code&gt;String&lt;/code&gt; e false para outros elementos, dessa maneira acabamos de aplicar um filtro em cima do array original para obter apenas os elementos do tipo &lt;code&gt;String&lt;/code&gt;. Vale ressaltar que o método não altera o Array original, e retorna uma cópia filtrada do mesmo, como podemos ver no retorno abaixo do código.&lt;/p&gt;

&lt;p&gt;&lt;a id="map"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Método map
&lt;/h2&gt;

&lt;p&gt;O método map é utilizado como um loop dentre todos os elementos do Array, é um método muito semelhante ao forEach por exemplo, porém o map consegue retornar um novo Array, sem alterar o Array original (assim como o filter) com os novos elementos que retornarmos. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Como o método map retorna um novo Array, diferente do método forEach, é possível encadear outros métodos em cima do retorno do map.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O método também funciona através de uma função de callback passada como parâmetro que manipula os elementos do Array. Veja um exemplo abaixo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv7za6wgswp68yee40653.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv7za6wgswp68yee40653.png" alt="Trecho de código explicando o método map" width="800" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No exemplo acima, todos os elementos da constante &lt;strong&gt;array&lt;/strong&gt; foram multiplicados por 2 e o novo Array gerado pelo método map foi alocado na constante &lt;strong&gt;newArray&lt;/strong&gt;, é possível observar os dois Arrays no final da execução, observe que o Array original não foi alterado.&lt;/p&gt;

&lt;p&gt;&lt;a id="reduce"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Método reduce
&lt;/h2&gt;

&lt;p&gt;O método reduce serve para reduzirmos todo um Array para um único número. Diferente dos outros métodos aqui citados, o método recebe dois parâmetros, o primeiro ainda é uma função de callback e o segundo é o valor inicial do retorno da função. &lt;/p&gt;

&lt;p&gt;A função de callback do método reduce recebe dois parâmetros: o primeiro é um "acumulador" que contém o retorno dos elementos anteriores e o segundo é o atual elemento em que a função está no Array original, aqui vamos chamá-los de: &lt;code&gt;accumulator&lt;/code&gt; e &lt;code&gt;currentValue&lt;/code&gt;. O método retorna um número.&lt;/p&gt;

&lt;p&gt;Veja um exemplo somando todos os números de um Array:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08fay81potsd2q3ia51f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08fay81potsd2q3ia51f.png" alt="Trecho de código explicando o método reduce" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repare que foi passado como segundo parâmetro do método o número 0, como dito acima, esse número é o valor inicial de retorno do método, caso esse número fosse 1 o retorno do método seria a soma que foi calculada + 1, já que o valor inicial começa em 1 e não 0. Para realizar a soma do Array, retornamos o &lt;code&gt;accumulator&lt;/code&gt; + &lt;code&gt;currentValue&lt;/code&gt;, dessa forma o accumulator do próximo elemento sempre será a soma de seus antecessores e quando chegar no fim do Array teremos a soma de todos os seus valores!&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Chegamos no final do post e agora você tem conhecimento sobre alguns dos principais métodos do javascript! Esses métodos com certeza são os mais utilizados (além de métodos mais simples como push e pop) dentro da linguagem, seja qual for o problema que for enfrentar, é sempre bom saber como utilizar esses métodos que auxiliam na resolução de qualquer problema!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
