Usando resolve e reject da Deferred() da jQuery

O objeto Deferred da jQuery é extremamente poderoso e ainda não muito utilizado. Uma coisa interessante nele é registrar cadeias de chamadas (callbacks) e poder associá-las a estados de sucesso (resolve) ou erro (reject) de funções, sejam elas síncronas ou assíncronas.

Para o exemplo, preferi usar chamadas síncronas, visando a simplicidade. A idéia é que o usuário clique na área verde (uma div de id green) de uma página (o que vamos tratar como sucesso). Se clicar na vermelha (uma div de id red), trataremos como erro.

No javascript, vamos então criar um objeto Deferred:

var def = $.Deferred();

Vamos então a esse objeto associar alguns handlers:

– quando ele for resolvido:

def.done(function() {
   alert("Você clicou na área verde :-)");
});

– quando for rejeitado:

def.fail(function() {
   alert("Você clicou na área vermelha :-(");
});

– quando for tanto rejeitado como resolvido

def.always(function() {
   alert("Obrigado por testar!");
});

Com isso, temos 2 cadeias definidas já. Em caso do objeto ser resolvido, será dado um alert que indica que usuário clicou na área verde e depois um outro agradecendo o teste. Em caso de ser rejeitado, um alert falando que clicou na área vermelha e aí a mesma mensagem de agradecimento é invocada.

Para resolver ou rejeitar, é simples:

$("div#green").on("click", def.resolve);
$("div#red").on("click", def.reject);

Vejam no jsFiddle esse exemplo: http://jsfiddle.net/3J5zA/2/

Existem usos mais complexos e interessantes para o objeto Deferred, o exemplo feito é para mostrar como criar cadeias de resolve e reject de forma simples e invocá-las. Na documentação oficial pode-se encontrar mais explicações sobre os métodos usados, bem como de outros.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *