fancy
fancy

Reputation: 51453

How to return the proper data from this function?

function getUserData(name) {
var userData = {};
twitter.get('http://api.twitter.com/1/users/lookup.json', {screen_name:name}, function(data) {
    userData = {
        name: data[0].screen_name,
        screenname: data[0].screen_name,
        id: data[0].id,
        url: data[0].url,
        description: data[0].description
    }
});
return userData;
}

I want to be able to write something like:

var userData = getUserData(name);

and have it return that userData object.

Upvotes: 2

Views: 148

Answers (1)

Raynos
Raynos

Reputation: 169511

You don't.

AJAX calls are asynchronous. You need to use callbacks in some manner or another.

function getUserData(name, cb) {
    var userData = {};
    twitter.get('http://api.twitter.com/1/users/lookup.json', {
        screen_name: name
    }, function(data) {
        userData = {
            name: data[0].screen_name,
            screenname: data[0].screen_name,
            id: data[0].id,
            url: data[0].url,
            description: data[0].description
        }
        cb(userData);
    });
}

getUserData(name, function(userData) {
    // do stuff.
});

If your using jQuery 1.5 you can use deferred promises which are jQuery Deferred objects.

function getUserData(name, cb) {
    var def = new jQuery.Deferred();
    twitter.get('http://api.twitter.com/1/users/lookup.json', {
        screen_name: name
    }, function(data) {
        var userData = {
            name: data[0].screen_name,
            screenname: data[0].screen_name,
            id: data[0].id,
            url: data[0].url,
            description: data[0].description
        }
        def.resolve(userData);
    });
    return def.promise();
}

var promise = getUserData(name);
promise.done(function(data) {
     // do stuff.
});

Upvotes: 2

Related Questions