Fórum [javascript] O que são Promises? #600036
25/01/2019
0
Quem poderia contribuir com a comunidade JavaScript explicando o que são Promises? ;-)
abraços!
Gladstone Matos
Curtir tópico
+ 1Post mais votado
25/01/2019
Um Promise está em um destes estados:
pending (pendente): Estado inicial, que não foi realizada nem rejeitada.
fulfilled (realizada): sucesso na operação.
rejected (rejeitado): falha na operação.
settled (estabelecida): Que foi realizada ou rejeitada.
Uma promessa pendente pode se tonar realizada com um valor ou rejeitada por um motivo (erro). Quando um desses estados ocorre, o método then do Promise é chamado, e ele chama o método de tratamento associado ao estado (rejected ou resolved). (Se a promessa foi realizada ou rejeitada quando o método de tratamento correspondente for associado, o método será chamado, deste forma não há uma condição de competição entre uma operação assíncrona e seus manipuladores que estão sendo associados.)
Como os métodos Promise.prototype.then e Promise.prototype.catch retornam promises, eles podem ser encadeados — uma operação chamada composição.
Exemplo em imagem: https://mdn.mozillademos.org/files/8633/promises.png
A realização da promise é simplesmente registrada, por meio de configuração na função callback de realização usando p1.then(). Alguns logs mostram como a parte síncrona do método é desacoplada da conclusão assíncrona da promise.
var promiseCount = 0;
function testPromise() {
var thisPromiseCount = ++promiseCount;
var log = document.getElementById('log');
log.insertAdjacentHTML('beforeend', thisPromiseCount +
') Started (<small>Sync code started</small>)<br/>');
// Criamos uma nova promise: prometemos a contagem dessa promise (após aguardar 3s)
var p1 = new Promise(
// a função resolve() é chamada com a capacidade para resolver ou
// rejeitar a promise
function(resolve, reject) {
log.insertAdjacentHTML('beforeend', thisPromiseCount +
') Promise started (<small>Async code started</small>)<br/>');
// Isto é apenas um exemplo para criar assincronismo
window.setTimeout(
function() {
// Cumprimos a promessa !
resolve(thisPromiseCount)
}, Math.random() * 2000 + 1000);
});
// definimos o que fazer quando a promise for realizada
p1.then(
// apenas logamos a mensagem e o valor
function(val) {
log.insertAdjacentHTML('beforeend', val +
') Promise fulfilled (<small>Async code terminated</small>)<br/>');
});
log.insertAdjacentHTML('beforeend', thisPromiseCount +
') Promise made (<small>Sync code terminated</small>)<br/>');
}Vinnicius Gomes
Gostei + 4
Mais Posts
25/01/2019
Gladstone Matos
Gostei + 0
25/01/2019
Vinnicius Gomes
Que bom que ficou claro Gladstone! Boa sorte no aprendizado dessa linguagem incrível!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)