0

我正在经历一个非常奇怪的问题。我希望通过 FB api 登录 facebook 时登录用户的高分。我正在使用以下代码

    function returnhighscore()
    {
        FB.api("/"+FB.getUserID()+"/scores", 'get', {}, function(response) { 
          if (!response || response.error) {
            alert('Error occured');
          } else {
            var high_score1 = response.data[0].score;
            //document.getElementById("fbtestVal").innerHTML = response.data[0].score;
            return(high_score1);

          }
        }); 
    }

FB加载后,我调用这个函数。奇怪的是,这个没有返回任何东西,但是当我警告或控制台记录回调中的值时,它会显示我的分数。

任何人都可以帮忙吗?

雅各布

4

1 回答 1

1

回调函数不应该返回值。相反,它们应该处理给它们的任何参数,并可能与更高范围的变量交互。

在您的情况下,我认为您可以在 returnhighscore 函数的范围内声明一个变量,然后进行 FB.api 调用,在回调函数中更新此变量的值,最后返回该变量(再次在您的函数范围内) :

function returnhighscore()
{
    //declare variable in function scope
    var highscore = null;

    //call facebook api
    FB.api("/"+FB.getUserID()+"/scores", 'get', {}, function(response) { 
      if (!response || response.error) {
        alert('Error occured');
      } else {
        var high_score1 = response.data[0].score;
        //document.getElementById("fbtestVal").innerHTML = response.data[0].score;

        //update value of function scope variable
        highscore = high_score1;
      }
    });

    //return updated value
    return highscore;
}
于 2012-06-18T16:48:54.580 回答