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 JavaScriptPromise.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?
