Caching data using deferred object

Caching Data API responses using deferred object.

by FiNGAHOLiC

HTML

<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
<button>Get tweet!</button>

JavaScript

// http://msdn.microsoft.com/en-us/scriptjunkie/gg723713

$.createCache = function(requestFunction){
    var cache = {};
    return function(key, callback){
        if(!cache[key]){
            cache[key] = $.Deferred(function(defer){
                requestFunction(defer, key);
            }).promise();
        };
        return cache[key].done(callback);
    };
};

$.cachedGetTweet = $.createCache(function(defer, query){
    console.log('FROM [AJAX]');
    $.ajax({
        url : 'http://search.twitter.com/search.json',
        data : {
            result_type : 'recent',
            rpp : 10,
            page : 1,
            q : query
        }
    }).then(defer.resolve, defer.reject);
});

$(function(){
    var $button = $('button');
    $button.on('click', function(){
        $.cachedGetTweet('jquery').then(function(res){
            console.log(res);
        }, function(){
            console.log('something wrong');
        });
    });

});