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

Posted

技术标签:

【中文标题】在 Fb.api 回调中拉出外部变量【英文标题】:Pull outside variable inside Fb.api callback 【发布时间】:2015-10-06 17:48:44 【问题描述】:

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

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

  );

【问题讨论】:

您可以简单地向/photo-id?fields=id,tags 发出请求,然后API 也会返回该ID,您可以将其作为响应的一部分进行访问。 【参考方案1】:

您可以创建另一个函数,将变量范围限定为该函数并使您的代码更具可读性:

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);
            
        
    );

【讨论】:

以上是关于在 Fb.api 回调中拉出外部变量的主要内容,如果未能解决你的问题,请参考以下文章

更方便的函数回调——Lambda

如何在Lua脚本中响应事件回调

C++ 成员函数作为外部库的回调函数

如何使用从外部脚本调用的回调发送信号?

如何从外部数组中获取内部数组

js回调函数内怎么调用外部this