2015-10-06 65 views
0

我很難理解如何在Fb.api調用之外設置一個變量,該變量位於該調用的回調函數內部。變量photoid被設置在for循環內,然後在那個for循環裏面,我用那個改變photoid來做一個FB.api調用。 (我甚至使用photoid構建電話,你會看到)。這部分工作都很好,但我在控制檯中注意到photoid沒有傳遞到該回調函數中,因此我試圖保存與先前設置的變量(taggedpersonid = specialfriendvar)相匹配的所有photoid。在Fb.api回調內拉外部變量

我相信這個解決方案與閉包(或許)有關,但我不太瞭解它們,並希望得到一些幫助。我怎樣才能得到我的回調函數中的每個photoid變量,以便它將成功保存到我的photosbasket數組中,如果匹配成立?

function proceedToResult() { 
 
    FB.api('/me', function(response) { 
 
    var fbid = response.id; 
 
    var profile_name_beta = response.name; 
 
    console.log(profile_name_beta); 
 
    FB.api('/me/photos', { 
 
     fields: ['id'], 
 
     limit: 200 
 
     }, 
 
     function(response) { 
 
     console.log(response); 
 
     if (response && !response.error) { 
 
      if (response.data.length > 0) { 
 
      for (var i = 0; i < response.data.length; i++) { 
 
       var photoid = response.data[i].id; 
 
       console.log(photoid); 
 
       FB.api('' + photoid + '/tags', function(response) { 
 
       console.log(response); 
 
       console.log("inside photoid is" + photoid); 
 
       for (var l = 0; l < response.data.length; l++) { 
 
        var taggedpersonid = response.data[l].id; 
 
        if (taggedpersonid == specialfriendvar) { // if photo has tagged same as chosen friend 
 
        photosbasket.push(photoid); 
 
        console.log(photosbasket); 
 
        } 
 
       } 
 
       }); 
 
      } 
 
      } 
 
     } 
 
     } 
 
    ); 
 

 
    }); 
 
}

+0

你可以簡單的讓你的要求'/photo-id?fields = id,tags代替 - 那麼API也會返回id,並且您可以將其作爲響應的一部分進行訪問。 – CBroe

回答

0

,您可以創建另一個函數,這將範圍變量該功能,使您的代碼更易讀:

function proceedToResult() { 
    FB.api('/me', function(response) { 
     var fbid = response.id; 
     var profile_name_beta = response.name; 
     console.log(profile_name_beta); 
     FB.api('/me/photos', { 
       fields: ['id'], 
       limit: 200 
      }, 
      function(response) { 
       console.log(response); 
       if (response && !response.error) { 
        if (response.data.length > 0) { 
         for (var i = 0; i < response.data.length; i++) { 
          var photoid = response.data[i].id; 
          console.log(photoid); 
          getPhoto(photoid); 
         } 
        } 
       } 
      } 
     ); 

    }); 
} 

function getPhoto(photoid) { 
    FB.api('' + photoid + '/tags', function(response) { 
     console.log(response); 
     console.log("inside photoid is" + photoid); 
     for (var l = 0; l < response.data.length; l++) { 
      var taggedpersonid = response.data[l].id; 
      if (taggedpersonid == specialfriendvar) { // if photo has tagged same as chosen friend 
       photosbasket.push(photoid); 
       console.log(photosbasket); 
      } 
     } 
    }); 
}