在Fb.api回调中拉出外部变量

时间:2015-10-06 17:48:45

标签: javascript jquery facebook facebook-graph-api scope

我无法理解如何在该呼叫的回调函数中引入一个在Fb.api调用之外设置的变量。变量photoid设置在for循环内,然后在for循环内部,我使用更改photoid进行FB.api调用。 (我甚至使用photoid构建调用,您将看到)。这部分一切都很好,但我在我的控制台中注意到photoid没有被传递到该回调函数中,因此我试图保存所有与之前设置相匹配的photoid变量(taggedpersonid = specialfriendvar)。

我认为解决方案与闭包(可能)有关,但我不太了解它们,并希望得到一些帮助。如何在回调函数中获取每个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);
                  }
                }
              });
            }
          }
        }
      }
    );

  });
}
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分: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);
            }
        }
    });
}