ES2018 - finalmente promete método

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 JavaScript

Mé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?

Source: https://habr.com/ru/post/pt427405/


All Articles