2012-02-09 59 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 
      } 
     }); 
} 

現在來簡單說一下。
我在警報期待出像
1-> HIII
2->你好
3->一些響應ID
4-> HIII
5->你好
6->一些resonse ID

但在現實中我得到了像
1-> HIII
2-> HIII
3-> HIII

持續到環的大小
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時具有相同的值。我相信這會解決你的問題。