如何从此函数返回正确的数据?

时间:2011-04-30 14:52:42

标签: javascript node.js

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;
}

我希望能够写出如下内容:

var userData = getUserData(name);

并让它返回该userData对象。

1 个答案:

答案 0 :(得分:2)

你没有。

AJAX调用异步。您需要以某种方式使用回调。

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.
});

如果您使用jQuery 1.5,则可以使用jQuery Deferred个对象的延迟承诺。

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.
});