2011-08-12 10 views
0

Facebookのjavascript sdkメソッドを使用していて、奇妙な動作をしていました。facebook javascript sdkメソッド

コードスニペット:

FB.api('/me/friends', function(response) { 
    friendCount = response.data.length; 
    for (i=0; i<friendCount; i++) { 
    friendId = response.data[i].id; 
    FB.api('/'+friendId, function(response) { 
     if (response.birthday) 
     resultList.push(new Array(friendId).concat(response.birthday)); 
     friendCount--; 
    }); 
    } 
}); 

私は誕生日のフィールドが定義されている友人や彼らの誕生日のIDの2Dアレイを期待していますが、私は右の誕生日を取得していますが、IDが私の中の最後の友人のことをしています友達リスト。 これがなぜ起こっているのでしょうか? FB.api('/'+friendId, ...が最初に実行されたときFB.api('/'+friendId, ...ためのコールバック関数がそのコールバック内friendIdの値と呼ばれる

答えて

0

現在のコールバックが実行されたfriendIdの値ではない値です。

FB.api('/me/friends', function(response) { 
    friendCount = response.data.length; 
    for (i=0; i<friendCount; i++) { 
    friendId = response.data[i].id; 
    FB.api('/'+friendId, function(response) { 
     if (response.birthday) 
     resultList.push(new Array(response.id).concat(response.birthday)); 
     friendCount--; 
    }); 
    } 
}); 
+0

私はこの問題を解決する方法を考えましたが、FB.api( '/' + friendID、...)の前に定義されたfriendIdの値がなぜ変わるのかわかりません。 function .. .. – joovam

+0

最も内側のコールバック関数は 'FB.api( '/ me/friends''と' friendId')のスコープ内にあり、最も内側のコールバック関数が呼び出された時点で 'friendId'の値はあなたの友人リストの最後の友人(私はおそらくこれを非常にうまく説明していないでしょう) – jBit

+0

基本的には、あなたの観点から見ると、 'friendId'の複数のコピーがそれぞれ' FB.api ( '/' + friendId、function(response){...} ' - これは当てはまりません。最も内側のコールバックが呼び出される時刻。 – jBit

関連する問題