1

在下面的 JavaScript 代码中,我无法让 user_likes 获取响应的值。我可以控制台输出“响应”,它具有我需要的值。但是,当我尝试控制台输出 user_likes 时,我得到了未定义。是什么赋予了?

function fqlUserLikes(user_id) {
    var user_likes;
    FB.api(
        {
            method: 'fql.query',
            query: 'SELECT page_id,name,type FROM page WHERE page_id IN (SELECT page_id FROM page_fan WHERE uid=' + user_id + ')'
        },
        function(response) {
            user_likes=response;
        }
    );
    Console.log(user_likes);
    return user_likes;
}

感谢您的帮助,在

4

2 回答 2

1

您的方法是异步的,因此当您尝试记录并返回变量时,它实际上还没有被分配。采取以下代码段:

//Do what you need to do in here!
function(response) {
    user_likes=response;
});

//The below code is executed before the callback above.
//Also, it should be console, and not Console. JS is case sensi.
Console.log(user_likes);
return user_likes;
于 2013-08-12T20:10:24.603 回答
1

user_likes不会立即调用 更改 的值的函数。FB.api()开始调用 API 的过程,然后返回。您的console.log()调用此时发生,然后您的函数将 user_likes 值返回给它的调用者。然后,稍后,api 调用完成,您的回调函数被调用,并将其设置user_likes为适当的值。不幸的是,没有什么可以读取该值了。

您需要完全重组代码以使其正常工作。Javascript 并不真正支持在代码中间等待事情发生;这是一种非常异步的语言。最好的方法是传递一个实际使用新值的回调函数,而不是尝试将其存储在变量中以供其他内容读取。

于 2013-08-12T20:10:31.023 回答