1

我正在嘗試收集在循環中調用的FB API異步請求的結果。我用下面的代碼:如何收集來自Facebook API請求的迴應?

function getPicturesByUserIds(friendsIdList) { 
     var userPictures = []; 
     for (var i = 0; i < friendsIdList.length; i++) { 
      (function() { 
       var userId = friendsIdList[i]; 
       var j = i; 
       var friendsIdListLength = friendsIdList.length - 1; 
       FB.api('/'+userId+'/picture?type=large', function (responce) { 
        if (responce && !responce.error) { 
         userPictures[userId] = responce.data.url; 
        } 
        if (j >= friendsIdListLength) { 
         console.log(userPictures); 
         sendPicturesAndGetResponse(userPictures); 
        } 
       }); 
      })(); 
     } 
    } 

此代碼在Chrome,但在Firefox 陣列userPictures是空的。

+0

'userPictures'應該是一個對象(因爲你使用userID鍵入),或者你應該使用索引'i'。除此之外,你的循環不斷重置'userID',所以你所有的回調函數都會解引用相同的值 - 你實際上想通過'(function(id){....}(id ))'call你必須避免這個 –

回答

1

可以解決這種事情與「遞歸函數」,或 - 更好 - 只需使用一個API調用它:

/me/friends?fields=name,picture.type(large) 

我也要算遞歸函數編程的基礎知識,雖然,你應該熟悉那些。例如:Calling a javascript function recursively

+0

是的,這是最簡單的方法。謝謝) –

相關問題