„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Können wir Versprechen in JavaScript gewaltsam widerrufen?

Können wir Versprechen in JavaScript gewaltsam widerrufen?

Veröffentlicht am 24.11.2024
Durchsuche:531

 Can We Forcefully Cancel Promises in JavaScript?

Promises: Können wir einen Abbruch wirklich erzwingen?

Promises, eingeführt in ES6, haben unseren Ansatz zur asynchronen Programmierung verändert. Es gibt jedoch Situationen, in denen wir möglicherweise eingreifen und ein Versprechen zwangsweise stornieren müssen, beispielsweise im Fall von Typ-Ahead-Suchszenarien.

Können wir also ein Versprechen stornieren?

In Modernes JavaScript, die harte Realität ist: nein. Versprechen unterstützen derzeit keine Stornierung.

Was können wir stattdessen tun?

Da eine direkte Stornierung von Versprechen keine Option ist, sind alternative Ansätze entstanden.

Verwenden Sie ein Stornierungs-Token

Ein Abbruchtoken ist ein Mechanismus, der es Ihnen ermöglicht, eine abbrechbare Variable an eine Funktion zu übergeben. Wenn das Token aufgerufen wird, bricht es den Vorgang ab und lehnt das zugehörige Versprechen ab. Hier ist ein Beispiel:

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

Mit diesem Ansatz können Sie:

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

// later on:
token.cancel();

Verwenden Sie eine Bibliothek eines Drittanbieters

Vielversprechend, „entschuldigen Sie das Wortspiel“, bieten Bibliotheken wie Bluebird Unterstützung für die Stornierung von Versprechen sowie andere erweiterte Funktionen.

Adopt a Last-Invoke Pattern

Dieses Muster stellt sicher, dass nur der letzte Aufruf einer Funktion ausgeführt wird. Es verwendet einen Token-Ansatz, um frühere Aufrufe abzubrechen:

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

Verwendung:

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

Fazit

Obwohl es enttäuschend ist, dass Versprechen die Stornierung nicht grundsätzlich unterstützen, bieten die oben genannten Techniken praktikable Workarounds. Während sich die Sprache weiterentwickelt, kann die tatsächliche Aufhebung von Versprechen in Zukunft Realität werden.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3