Est-il possible de créer et d'utiliser un objet Reporté directement avec AJAX?
-
21-12-2019 - |
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?
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()
.