O autor da nota, cuja tradução estamos publicando hoje, diz que dificilmente se absteve de não chamá-la de "Finalmente - a oportunidade que todo mundo estava esperando" ou de alguma forma brincando sobre esse assunto. No final, ele decidiu ficar sem piadas e apenas falar sobre o recurso realmente importante e útil dos objetos Promise.
Se você está apenas começando a aprender JavaScript e não está muito familiarizado com promessas (às vezes elas são chamadas de "promessas", "resultados prometidos", "Objetos promissores"), poderá estar interessado em nossas publicações anteriores sobre este tópico:
→
Promessas no ES6: padrões e antipadrões→
JavaScript: métodos de programação assíncronos→
JavaScript ES8 e transição para assíncrona / aguardada→
Assíncrono / aguardar: 6 razões para esquecer promessas→
Escape from Hell assíncrono / aguarde→
JavaScript ES6: escreva menos - faça mais→
Guia de Promessas para quem deseja separá-las→
Design assíncrono / aguardar JavaScript: pontos fortes, armadilhas e padrões de uso→
Usando promessas em JavaScriptMétodo Promise.prototype.finally
A cláusula
25.6.5.3 da norma ECMAScript 2018 é dedicada ao
método Promise.prototype.finally.De acordo com
caniuse.com , o nível de suporte para esse método é de aproximadamente 81%. Este método também pode ser usado no Node.js.
O método
finally
promessa é uma das inovações mais importantes do padrão, que permite especificar uma função que será executada independentemente do resultado da promessa. Essa função será cumprida se a promessa for resolvida com sucesso e se for rejeitada.
Considere um exemplo:
const myPromise = new Promise((resolve, reject) => { setTimeout(() => { resolve('success!!!'); }, 2000); });
Essa é uma promessa perfeitamente comum que se resolve após 2000 milissegundos. Se depois disso precisarmos executar alguma ação, precisaremos de um bloco
then
:
myPromise.then( result => { console.log(result) }, failMessage => { console.log(failMessage) } );
Duas funções anônimas são passadas para o método
then
. O primeiro será executado se a promessa for resolvida com sucesso. O segundo é quando é rejeitado. Nossa promessa sempre termina com sucesso, a mensagem de
success!!!
sempre será exibida no console
success!!!
. Tudo isso é muito bom, mas e se for necessário que certas ações sejam realizadas após a rejeição da promessa e após a conclusão bem-sucedida de seu trabalho? Aqui, o método
finally
nos ajudará:
const myPromise = new Promise((resolve, reject) => { setTimeout(() => { resolve('success!!!'); }, 2000); }); myPromise.then( result => { console.log(result) }, failMessage => { console.log(failMessage) } ).finally(finallyMessage => { console.log('FINALLY!!')});
Independentemente de como a promessa conclua seu trabalho, além da mensagem correspondente, o texto
FINALLY!!
, que indica que a função de retorno de chamada passada para o método
finally
funciona de qualquer maneira. Para verificar isso - você pode
experimentar .
Sumário
O fato de o método Promise.prototype.finally ter aparecido no ES2018 sugere que um nível muito alto de suporte ao navegador pode ser esperado em um futuro próximo. Isso significa que o que você tinha anteriormente para usar ferramentas auxiliares criadas por desenvolvedores de terceiros agora pode ser implementado usando ferramentas padrão.
Em que situações o método
Promise.prototype.finally
pode ser útil? Por exemplo, se, quando você inicia o Promise usado para baixar algo, alguma animação começa a ser reproduzida,
finally
você pode concluir essa animação. No bloco
finally
, você pode, por exemplo, fechar uma determinada janela modal. De fato, existem muitas situações em que o método
finally
pode ser útil.
Caros leitores! Você usou substitutos para o método finalmente promissor antes de suas implementações padrão?
