Question

J'ai une application qui envoie un peu de requêtes AJAX lorsqu'un utilisateur clique sur un bouton spécifique.

Cependant, j'ai aussi quelque chose de semblable à un bouton "Annuler", qui doit abandonner toutes les demandes.

Je suis à l'aide d' $.when actuellement pour traiter toutes les demandes envoyées, avec des rappels ajouté sur la Promise objet auquel il renvoie.

Cependant, le fait que $.when retourne un Promise l'objet est frustrant, car il n'a pas (volontairement) d'inclure les méthodes Deferred contrôle de la demande, comme le montre avec ce code:

À l'aide de $.lorsque

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

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

À l'aide d'une requête AJAX (jqXHR met en œuvre le report de l'interface)

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

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

Je suis à la recherche d'un moyen de récupérer les Deferred l'objet ou de la remplacer $.when avec une méthode qui effectue les mêmes, mais renvoie un Deferred objet à la place.À partir de là, je vais être en mesure d'appeler un adapté de rejet / abandon de méthode.

Est-ce possible?

Était-ce utile?

La solution

Vous pouvez mettre de la demande dans un tableau et d'abandonner individuellement lorsque vous en avez besoin.

Pour cela, vous pouvez utiliser .apply sur $.when.Par exemple:

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

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

Différés objets sont uniquement utilisés pour créer des promesses de rappel Api.Vous ne pouvez pas "récupérer" le différée objet d'une promesse.Seulement en créer de nouveaux à l'aide.

Vous pouvez également regarder dans les Dominique de last().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top