2012-02-09 4 views
0

forループでFB.apiを実行する際に問題が発生しています。私は同期モードでFB.api()コールを作成するのに助けが必要です

for(var i = 0; i < commentObjectLength; i++){ 
    var fbFeedID = commentObject.OwnCommentList[i].fbFeedID; 
    var OwnCommentID = commentObject.OwnCommentList[i].OwnCommentID; 
    var accessToken = commentObject.OwnCommentList[i].accessToken; 
    var commentText = commentObject.OwnCommentList[i].commentText; 
    alert("Hiii"); // >>>>>>>1 

    FB.api('/' + fbFeedID + '/comments', 'post', { 
      message: commentText, 
      access_token : accessToken 
     }, function (response) { 
      if (!response || response.error){ 
       //alert(response.error.message); 
      } else { 
       alert("Hello"); // >>>>>>>2 
       alert(response.id); // >>>>>>>3 
      } 
     }); 
} 

ここで簡単に教えてください。
Iは、いくつかの応答ID
4-> HIII
5>ハロー
6>いくつかresonse ID

が>
3-ハロー>
1-> HIII
2-よう警告中で期待してい

しかし、現実には、私は>
2 - HIII>の1-
ようHIII
、3-> HIII

を取得しています210

ループサイズまで
8>こんにちは
、9->いくつかの応答ID
10->こんにちは
11 - >いくつかの応答のIDが

問題は、ループの最後の日は行くだろう、すべての時間が続くが続きますFacebookへのコメントやフィードへのコメント。別途ではありません。

だから私はこの問題を解決するのを助けてください。私はたくさん苦労しています。
(すべてが問題を理解できると願っています。余分な情報が必要な場合は質問してください)

答えて

0

FB。*はイベントベースです。同期をとるためのいくつかのトリックがありますが、現実的には機能しません。関数呼び出しを連鎖させる必要があります。

for(var i = 0; i < commentObjectLength; i++){ 
    var fbFeedID = commentObject.OwnCommentList[i].fbFeedID; 
    var OwnCommentID = commentObject.OwnCommentList[i].OwnCommentID; 
    var accessToken = commentObject.OwnCommentList[i].accessToken; 
    var commentText = commentObject.OwnCommentList[i].commentText; 

    FB.api('/' + fbFeedID + '/comments','post',{ 
      message: commentText, 
      access_token : accessToken 
     }, function (response) { 
      alert("Hiii"); // >>>>>>>1 
      if (!response || response.error){ 
       //alert(response.error.message); 
      } else { 
       alert("Hello");// >>>>>>>2 
       alert(response.id); // >>>>>>>3 
      } 
     }); 
} 
0

さらに進んで勉強する必要があります。Closuresこの問題は、適切な解決方法を提供します。

クロージャを使用すると、すべての変数値を独自の関数呼び出しに保持できるため、FB.apiが呼び出されたときにFB.apiが応答してコードに戻り、すべてのローカル変数が同じ値になります。私はこれがあなたの問題を解決すると確信しています。

関連する問題