Domanda

Ho un'applicazione che invia alcune richieste AJAX quando un utente fa clic su un pulsante specifico.

Tuttavia, ho anche qualcosa di simile a un pulsante "Annulla", che dovrebbe abortire tutte le richieste.

Sto usando $.when attualmente per gestire tutte le richieste inviate, con callback appropriate aggiunte sull'oggetto Promise restituisce.

Tuttavia, il fatto che $.when restituisca un oggetto Promise è frustrante, in quanto non (deliberatamente) include i metodi Deferred deve controllare le richieste, come mostrato con questo codice:

Usando $ .Quando

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

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

Utilizzo di una richiesta AJAX (JQXHR implementa l'interfaccia differita)

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

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

Sto cercando un modo per recuperare l'oggetto Deferred o sostituire $.when con un metodo che esegue lo stesso, ma restituisce invece un oggetto Deferred. Da lì, sarò in grado di chiamare un metodo di respinto / abort adatto.

è possibile?

È stato utile?

Soluzione

È possibile inserire le richieste in un array e interromparle singolarmente quando è necessario.

Per questo è possibile utilizzare .apply su $.when.Ad esempio:

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

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

Gli oggetti differiti vengono utilizzati solo per creare promesse da API di callback.Non puoi "recuperare" l'oggetto differito di una promessa già esistente.Solo ne crea nuovi usando.

Si potrebbe anche desiderare di guardare a Domenic last() .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top