Pergunta

Eu tenho uma aplicação que envia algumas solicitações AJAX quando um usuário clica em um botão específico.

No entanto, eu também tenho algo semelhante a um 'Cancelar' botão, o qual deve cancelar todos os pedidos.

Eu estou usando $.when atualmente para lidar com todos os pedidos enviados, com os devidos retornos de chamada adicionado para o Promise objeto que ele retorna.

No entanto, o fato de que $.when retorna um Promise objeto é frustrante, como não (deliberadamente) incluem os métodos Deferred tem para controlar os pedidos, tal como é apresentado com este código:

Usando $.quando

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

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

Usando uma solicitação AJAX (jqXHR implementa o Diferidos 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"]

Eu estou procurando uma maneira de recuperar o Deferred objeto, ou substituir $.when com um método que executa a mesma, mas retorna uma Deferred objeto em vez disso.A partir daí, eu vou ser capaz de chamar um adequado de rejeição / anulação método.

Isso é possível?

Foi útil?

Solução

Você pode colocar os pedidos em um array e anular-lhes, individualmente, quando necessário.

Para isso, você pode usar .apply no $.when.Por exemplo:

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

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

Diferidos objetos são usados somente para criar promessas de retorno de chamada de APIs.Você não pode "recuperar" o objeto adiada de um já existente promessa.Apenas criar novas com ele.

Você também pode querer olhar em Domenic last().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top