È possibile creare e utilizzare un oggetto differito direttamente con Ajax?
-
21-12-2019 - |
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?
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()
.