Promise em Node.js

Anderson Irias - 30/08/2019

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();