Maison > interface Web > js tutoriel > le corps du texte

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

DDD
Libérer: 2024-11-02 22:47:03
original
569 Les gens l'ont consulté

 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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">cancel: () => reject(new Error('Operation has been cancelled.'))
Copier après la connexion
Copier après la connexion

}
});

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">cancel: () => reject(new Error('Operation has been cancelled.'))
Copier après la connexion
Copier après la connexion

});
}

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">signal: cancellationToken.signal
Copier après la connexion

});
}

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!

source:php.cn
Article précédent:Comment obtenir la couleur RVB d'un pixel de toile sous le curseur de la souris ? Article suivant:Comment éviter l'erreur OVER_QUERY_LIMIT de l'API Google Maps dans la v3 ?
Déclaration de ce site Web
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
Derniers articles par auteur
Derniers numéros
Rubriques connexes
Plus>
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal