Frage

Ich habe eine Anwendung, die einige AJAX-Anfragen sendet, wenn ein Benutzer auf eine bestimmte Schaltfläche klickt.

Allerdings habe ich auch so etwas wie einen „Abbrechen“-Button, der alle Anfragen abbrechen soll.

Ich benutze $.when ist derzeit für die Bearbeitung aller gesendeten Anfragen zuständig, wobei entsprechende Rückrufe hinzugefügt werden Promise Objekt, das es zurückgibt.

Allerdings ist die Tatsache, dass $.when gibt a zurück Promise Objekt ist frustrierend, da es die Methoden (absichtlich) nicht enthält Deferred muss die Anfragen steuern, wie mit diesem Code gezeigt:

Verwendung von $.when

var x = $.when($.get('/'), $.get('/')); // .then(function() {console.log('done');});

Object.keys(x); 
// ["state", "always", "then", "promise", "pipe", "done", "fail", "progress"]

Verwendung einer AJAX-Anfrage (jqXHR implementiert die Deferred-Schnittstelle)

var x = $.get('/');

Object.keys(x); 
// ["readyState", "getResponseHeader", "getAllResponseHeaders", "setRequestHeader", "overrideMimeType", "statusCode", "abort", "state", "always", "then", "promise", "pipe", "done", "fail", "progress", "complete", "success", "error"]

Ich suche nach einer Möglichkeit, das abzurufen Deferred widersprechen oder ersetzen $.when mit einer Methode, die das Gleiche ausführt, aber a zurückgibt Deferred Objekt stattdessen.Von dort aus kann ich eine geeignete Ablehnungs-/Abbruchmethode aufrufen.

Ist das möglich?

War es hilfreich?

Lösung

Sie können die Anfragen in einem Array zusammenfassen und sie bei Bedarf einzeln abbrechen.

Hierfür können Sie verwenden .apply An $.when.Zum Beispiel:

var requests = [$.get('/'), $.get('/')];
$.when.apply($,requests).then(function(res1,res2){
      //access results here
});

// aborting:
requests.forEach(function(x){ return x.abort();});

Zurückgestellte Objekte werden nur zum Erstellen von Versprechen aus Callback-APIs verwendet.Sie können das zurückgestellte Objekt eines bereits vorhandenen Versprechens nicht „abrufen“.Erstellen Sie damit nur neue.

Vielleicht möchten Sie auch bei Domenic vorbeischauen last().

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top