在我下面的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;
}
感谢您的帮助, 在。
答案 0 :(得分: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;
答案 1 :(得分:1)
不会立即调用更改user_likes
值的函数。 FB.api()
启动调用API的过程,然后返回。此时您的console.log()
调用会发生,然后您的函数会将user_likes值返回给其调用者。然后,在稍后的某个时刻,api调用完成,调用您的回调函数,并将user_likes
设置为适当的值。不幸的是,没有什么可以读取这个价值。
您需要完全重构代码才能使其正常工作。 Javascript并不支持在代码中间等待事情发生;这是一种非常异步的语言。最好的方法是,如果你传递一个实际使用新值的回调函数,而不是试图将它存储在一个变量中以供其他东西阅读。