2012-04-14 1 views
0

私は非常に奇妙な問題を通過しています。 FB apiを使用してFacebookにログインすると、ログインしたユーザーの得点が高くなります。次のコードを使用していますFacebook Javascript - ハイスコアAPI - スコアが見つかりましたが返すことができません

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ロード後、この関数を呼び出します。奇妙なことに、これは何も返されませんが、コールバック内で値を記録したり警告したりすると、スコアが表示されます。

いずれかを助けてもらえますか?

Jacob

答えて

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

これは閉鎖にも当てはまります。 Javaでのようにjsで動作する "return"を期待することは、このような混乱の典型的な原因です。 – branchgabriel

関連する問題