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

Pouvons-nous annuler de force les promesses en JavaScript ?

Barbara Streisand
Libérer: 2024-10-30 15:09:03
original
350 Les gens l'ont consulté

 Can We Forcefully Cancel Promises in JavaScript?

Promesses : pouvons-nous vraiment forcer l'annulation ?

Les promesses, introduites dans ES6, ont transformé notre approche de la programmation asynchrone. Cependant, il existe des situations dans lesquelles nous pouvons être amenés à intervenir et à annuler de force une promesse, comme dans le cas de scénarios de recherche par saisie anticipée.

Alors, pouvons-nous annuler une promesse ?

Dans JavaScript moderne, la dure réalité est : non. Les promesses ne prennent actuellement pas en charge l'annulation.

Que pouvons-nous faire à la place ?

L'annulation directe d'une promesse n'étant pas une option, des approches alternatives ont émergé.

Utilisez un jeton d'annulation

Un jeton d'annulation est un mécanisme qui vous permet de passer une variable annulable dans une fonction. Lorsque le jeton est appelé, il abandonne l'opération et rejette la promesse associée. Voici un exemple :

function getWithCancel(url) { // token for cancellation
  var xhr = new XMLHttpRequest();
  xhr.open("GET", url);
  return new Promise(function(resolve, reject) {
    xhr.onload = function() { resolve(xhr.responseText); };
    token.cancel = function() {
      xhr.abort();
      reject(new Error("Cancelled"));
    };
    xhr.onerror = reject;
  });
}
Copier après la connexion

Avec cette approche, vous pouvez :

var token = {};
var promise = getWithCancel("/someUrl", token);

// later on:
token.cancel();
Copier après la connexion

Utiliser une bibliothèque tierce

Prometteuse, "excusez le jeu de mots", bibliothèques comme Bluebird, prennent en charge l'annulation des promesses, ainsi que d'autres fonctionnalités avancées.

Adopter un modèle de dernier appel

Ce modèle garantit que seule la dernière invocation d'une fonction s'exécute. Il utilise une approche symbolique pour annuler les invocations précédentes :

function last(fn) {
  var lastToken = { cancel: function(){} };
  return function() {
    lastToken.cancel();
    var args = Array.prototype.slice.call(arguments);
    args.push(lastToken);
    return fn.apply(this, args);
  };
}
Copier après la connexion

Utilisation :

var synced = last(getWithCancel);
synced("/url1?q=a"); // canceled
synced("/url1?q=ab"); // canceled
synced("/url1?q=abc"); // canceled
synced("/url1?q=abcd").then(function() {
  // only this will run
});
Copier après la connexion

Conclusion

Bien qu'il soit décevant que les promesses ne prennent pas intrinsèquement en charge l'annulation, ce qui précède Les techniques fournissent des solutions de contournement viables. À mesure que le langage évolue, la véritable annulation des promesses pourrait devenir une réalité dans le futur.

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
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!