Maison  >  Article  >  interface Web  >  Les promesses peuvent-elles être annulées ? Une plongée approfondie dans les mécanismes d'annulation en JavaScript

Les promesses peuvent-elles être annulées ? Une plongée approfondie dans les mécanismes d'annulation en JavaScript

DDD
DDDoriginal
2024-11-02 22:47:03570parcourir

 Can Promises Be Cancelled? A Deep Dive into Cancellation Mechanisms in JavaScript

Promesse - est-il possible de forcer l'annulation d'une promesse

Les promesses ES6 elles-mêmes ne prennent pas en charge l'annulation. Cependant, des travaux sont en cours pour ajouter l'annulation des promesses dans la norme ECMAScript.


Une proposition d'annulation de promesse a été faite dans les spécifications WHATWG à inclure dans la prochaine version ES2021 de JavaScript. Cette proposition introduit une nouvelle interface AbortController qui peut être utilisée pour annuler des promesses.


<br>const abortController = new AbortController();<br>const promise = fetch('https://example.com', {<br> signal : abortController.signal<br>});</p>
<p>abortController.abort();<br></ pre><br><p>Dans le JavaScript moderne, vous pouvez utiliser AbortController pour annuler les tâches basées sur Promise, telles que les requêtes de récupération ou d'autres opérations asynchrones.</p></p>
<p><p>Cependant, si vous ne parvenez pas à utiliser AbortController, il est possible d'implémenter votre propre mécanisme d'annulation pour les opérations initiées par l'utilisateur, comme dans le cas d'une soumission de formulaire asynchrone ou d'une requête réseau.</p><br><p><strong>Création d'un mécanisme d'annulation personnalisé en JavaScript</strong> : Vous pouvez implémenter un mécanisme d'annulation simple en :</p><br><ul><br><li>Création d'un CancellationToken qui vous permettra d'annuler le opération.</li><br><li>Transmission du CancellationToken à la tâche asynchrone que vous souhaitez annuler.</li><br><li>Annulation du CancellationToken lorsque l'utilisateur lance l'annulation.< /li><br></ul><br><p>Le CancellationToken peut être implémenté en tant que promesse avec une méthode Cancel() qui rejette la promesse. Voici un exemple :</p><br><pre class="lang-js Prettyprint-override"><br>const CancelToken = new Promise((resolve, rejet) => {<br> return { </p>
<pre class="brush:php;toolbar:false">cancel: () => reject(new Error('Operation has been cancelled.'))

}
});

Ensuite, vous pouvez transmettre le CancelToken à la tâche asynchrone que vous souhaitez annuler, comme ceci :< ;/p>

<br>const asyncTask = (cancellationToken) => {<br> // Implémentez votre tâche asynchrone ici<br> return fetch('https://example.com', {</p>
<pre class="brush:php;toolbar:false">cancel: () => reject(new Error('Operation has been cancelled.'))

});
}

Et enfin, vous pouvez annuler la tâche asynchrone en appelant la méthode Cancel() sur CancelToken, comme ceci :


<br>cancellationToken.cancel();<br>

Utilisation d'une bibliothèque tierce : Si vous souhaitez utiliser une bibliothèque tierce pour implémenter l'annulation, vous pouvez utiliser une bibliothèque comme bluebird ou rxjs. Voici un exemple utilisant bluebird :


<br>const Promise = require('bluebird');<br>const CancelToken = new Promise .CancellationToken();</p>
<p>const asyncTask = () => {<br> return fetch('https://example.com', {</p>
<pre class="brush:php;toolbar:false">signal: cancellationToken.signal

});
}

cancellationToken.cancel();
< ;/pre>

Ce ne sont là que quelques façons d’implémenter l’annulation en JavaScript. La meilleure approche dépendra de vos besoins spécifiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn