Promise em Node.js

Promise é o objeto que representa a conclusão final (ou falha) de uma operação assíncrona e seu valor resultante.

Um código ser síncrono ou assíncrono se refere ao seu fluxo de execução. Quando as operações do código, executam na ordem em que foram escritas, sempre aguardando o termino de uma para a execução da próxima temos a execução síncrona. Quando as operações do código, executam sem aguardar o termino da operação anterior temos a execução assíncrona.

Sendo assim podemos criar uma Promise, para obter o resultado da execução assíncrona, já que a mesma não e feita na ordem de execução do código.

Como criar uma promise

Utilizamos o new Promise, para criar um novo objeto do tipo Promise. Neste exemplo, dentro da função de callback, utilizamos a função setTimeout para simular uma operação que demora 300 millisegundos para terminar.

Após terminar a execução da operação, passamos para a função resolve, que é uma função própria do objeto promise para retornar o resultado.

Quando utilizamos o console.log para imprimir a promisse, ele retorna a informação que se trata de um objeto promise. Isso ocorre devido o console.log ter sido executado, antes da operação da promisse terminar.

Ao utilizar a função then, conseguimos aguardar o fim da execução da promise e assim pegar seu resultado.

var promise = new Promise(function(resolve, reject) {
   setTimeout(function() {
     resolve('Promessa cumprida!');
   }, 300);
 });

 promise.then(function(value) {
   console.log(value);
   // Resultado esperado: "Promessa cumprida!"
 });

 console.log(promise);
 // Resultado esperado: [object Promise]

Existem várias funções para lidar com promise em JavaScript, para mais informações verifique o site da mozilla .

async | await

A partir do EcmaScript 6 (ES6), podemos utilizar a declaração async em uma função. Assim podemos pegar o retorno de uma promisse.

Neste exemplo criamos uma função chamada: resolveAposDoisSegundos. Ela retorna uma Promisse que simula a execução de uma operação que demora dois segundos.

Após isso criamos uma função chamada funcaoAssincrona que utiliza o async. Com isso conseguimos utilizar o await para aguardar o retorno da função: resolveAposDoisSegundos que é uma Promisse.

function resolveAposDoisSegundos() {
   return new Promise(resolve => {
     setTimeout(() => {
       resolve('Promessa cumprida!');
     }, 2000);
   });
 }

 async function funcaoAssincrona() {
   var result = await resolveAposDoisSegundos();
   console.log(result);
   // Resultado esperado: "Promessa cumprida!"
 }

 funcaoAssincrona();

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *