Heim >Web-Frontend >js-Tutorial >Können wir Versprechen in JavaScript gewaltsam widerrufen?

Können wir Versprechen in JavaScript gewaltsam widerrufen?

Barbara Streisand
Barbara StreisandOriginal
2024-10-30 15:09:03414Durchsuche

 Can We Forcefully Cancel Promises in JavaScript?

Versprechen: Können wir die Stornierung wirklich erzwingen?

Versprechen, die in ES6 eingeführt wurden, haben unseren Ansatz zur asynchronen Programmierung verändert. Es gibt jedoch Situationen, in denen wir 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();

Eine Bibliothek eines Drittanbieters verwenden

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

Übernehmen Sie ein Last-Invoke-Muster

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

Schlussfolgerung

Es ist zwar enttäuschend, dass Versprechen die Stornierung nicht grundsätzlich unterstützen, aber das oben Genannte Techniken bieten praktikable Workarounds. Wenn sich die Sprache weiterentwickelt, kann die tatsächliche Aufhebung von Versprechen in Zukunft Realität werden.

Das obige ist der detaillierte Inhalt vonKönnen wir Versprechen in JavaScript gewaltsam widerrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn