ES2018 - enfin promet méthode

L'auteur de la note, dont nous publions la traduction aujourd'hui, dit qu'il s'est à peine abstenu de ne pas l'appeler «Enfin - l'opportunité que tout le monde attendait» ou de plaisanter sur ce sujet. En fin de compte, il a décidé de se passer de blagues et de simplement parler de la fonctionnalité vraiment importante et utile des objets Promise.


Si vous commencez tout juste Ă  apprendre JavaScript et n'ĂȘtes pas trop familier avec les promesses (parfois elles sont appelĂ©es «promesses», «rĂ©sultats promis», «objets promis»), alors vous pourriez ĂȘtre intĂ©ressĂ© par nos publications prĂ©cĂ©dentes sur ce sujet:

→ Promesses dans ES6: motifs et anti-motifs
→ JavaScript: mĂ©thodes de programmation asynchrones
→ JavaScript ES8 et transition vers async / attente
→ Async / attente: 6 raisons d'oublier les promesses
→ Échapper à l'enfer asynchrone / attendre
→ JavaScript ES6: Ă©crivez moins - faites plus
→ Guide des promesses pour ceux qui veulent les trier
→ Conception JavaScript asynchrone / en attente: points forts, piùges et modùles d'utilisation
→ Utilisation de promesses en JavaScript

Promise.prototype.finally, méthode


L'article 25.6.5.3 de la norme ECMAScript 2018 est dĂ©diĂ© Ă  la mĂ©thode Promise.prototype.finally . Selon caniuse.com , le niveau de support pour cette mĂ©thode est d'environ 81%. Cette mĂ©thode peut Ă©galement ĂȘtre utilisĂ©e dans Node.js.

La méthode de la promesse finale est l'une des innovations les plus importantes de la norme, qui vous permet de spécifier une fonction qui sera exécutée quel que soit le résultat de la promesse. Une telle fonction sera remplie si la promesse est résolue avec succÚs et si elle est rejetée.
Prenons un exemple:

 const myPromise = new Promise((resolve, reject) => { setTimeout(() => { resolve('success!!!'); }, 2000); }); 

Il s'agit d'une promesse parfaitement courante qui se résout aprÚs 2000 millisecondes. Si aprÚs cela, nous devons effectuer une action, nous aurons besoin d'un bloc then :

 myPromise.then( result => { console.log(result) }, failMessage => { console.log(failMessage) } ); 

Deux fonctions anonymes sont passées à la méthode then . Le premier sera exécuté si la promesse est résolue avec succÚs. Le second, c'est quand il est rejeté. Notre promesse se termine toujours avec succÚs, le message de success!!! sera toujours affiché dans la console success!!! . Tout cela est trÚs bien, mais qu'en est-il s'il est nécessaire que certaines actions soient menées aprÚs le rejet de la promesse, et aprÚs l'achÚvement réussi de son travail? Ici, la méthode finally nous aidera:

 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!!')}); 

Quelle que soit la fin de la promesse, le texte sera FINALLY!! affichĂ© en plus du message correspondant Ă  la console FINALLY!! , ce qui nous indique que la fonction de rappel passĂ©e Ă  la mĂ©thode finally fonctionne quand mĂȘme. Afin de vĂ©rifier cela - vous pouvez expĂ©rimenter .

Résumé


Le fait que la mĂ©thode Promise.prototype.finally soit apparue dans ES2018 suggĂšre qu'un niveau trĂšs Ă©levĂ© de prise en charge du navigateur peut ĂȘtre attendu dans un avenir prĂ©visible. Cela signifie que ce que vous aviez auparavant Ă  utiliser des outils auxiliaires créés par des dĂ©veloppeurs tiers peut dĂ©sormais ĂȘtre implĂ©mentĂ© Ă  l'aide d'outils standard.

Dans quelles situations la mĂ©thode Promise.prototype.finally peut- Promise.prototype.finally ĂȘtre utile? Par exemple - si, lorsque vous dĂ©marrez la Promesse utilisĂ©e pour tĂ©lĂ©charger quelque chose, une animation commence Ă  jouer, vous pouvez finally terminer cette animation. Dans le bloc finally , vous pouvez, par exemple, fermer une certaine fenĂȘtre modale. En fait, il existe de nombreuses situations dans lesquelles la mĂ©thode finally peut ĂȘtre utile.

Chers lecteurs! Avez-vous utilisé des substituts à la méthode finalement promises avant ses implémentations standard?

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


All Articles