14 agosto 2012

Jugando con jQuery Deferred


El objeto Deferred es una característica poco conocida de jQuery que permite escribir menos código. Veamos como aprovecharlo.

Todas las funciones AJAX en jQuery retornan un Deferred, y por lo tanto:

$.ajax({url:'/api/users', success:function(d){console.log(d)}});

se puede escribir como:

$.ajax({url:'/api/users'}).done(function(d){console.log(d)})

El cambio es sutil pero simplifica algunos casos engorrosos. Por ejemplo esperar el resultado de multiples llamadas AJAX:

var usersRequest = $.get('/api/users');
var settingsRequest = $.get('/api/settings');

jQuery.when(usersRequest, settingsRequest).done(function (users, settings) {
    console.log(users);
    console.log(settings);
});


O simplificar código mediante null objects:

var request = (shouldUpdate) ? $.post('/api/user', userData) 
                             : jQuery.Deferred().resolve();
request.done(function() { doSomething() });

No hay comentarios.:

Publicar un comentario