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