Facebook api多次请求

时间:2014-06-26 07:47:31

标签: facebook facebook-graph-api

我正在创建一个facebook应用程序生成器。我需要检查用户当前是否在此Facebook页面上添加了应用程序。

为了做到这一点,我首先要求facebook api提供他的页面列表。然后我遍历所有页面。并在每个页面上请求应用程序。

最后,我将appId与刚刚创建的用户进行比较,并相应地显示警告。

问题是,当我循环遍历每个pageId并请求子页面的FbApi时,请求响应被延迟,并且for each循环在从facebook获取结果之前完成其循环。

这是我的代码,这是非常复杂的......任何解决问题的想法都非常受欢迎。

FB.login(function (response) {

    FB.api('/me/accounts', function (apiresponse) {

        var totalPages = apiresponse.data.length;
        var pageIndex = 0;
        $.each(apiresponse.data, function (pageNumber, pageData) {

            var pageAccessToken = pageData.access_token;
            var tabPageName = pageData.name;
            var tabPageId = pageData.id;

            FB.api("/" + tabPageId + "/tabs", function (response) {

                var foundApp = false

                $.each(response.data, function (index, value) {
                    var exsistingAppId = (value.id).split("app_").pop();
                    if (exsistingAppId == fbAppId) {
                        foundApp = true;
                    }
                });

                if (foundApp === true) {

                    var data = {
                        PageId: tabPageId,
                        Url: window.location.href.split("/").pop()
                    }

                    $.ajax({
                        type: "POST",
                        url: '/facebook/Match',
                        contentType: "application/json",
                        data: JSON.stringify(data),
                        success: function (data) {
                            if (data == "True") {
                                $("#addToFacebookModal ul").append("<li><span class='pageTab'><a class='pageTabName' target='_blank' href='https://facebook.com/profile.php?id=" +tabPageId + "'>" +tabPageName + "</a></span><a class='deleteAppFromPageTab' data-id='" +tabPageId + "' data-accessToken='" +pageAccessToken + "'>[x]</a></li>");
                                alreadyAdded.push(true);
                            } else {
                                alreadyAdded.push(false);
                            }

                            pageIndex++;

                            if (pageIndex == totalPages) {
                                console.log("Total Pages = " + totalPages + ", Looped through = " + alreadyAdded.length);
                                if (alreadyAdded.indexOf(true) >= 0) {
                                    $("#addToFacebookModal").modal();
                                } else {
                                    addToFacebook();
                                }
                            }
                        }
                    });
                }
                else {
                    pageIndex++;
                }

            });

        });
    });
}, { scope: 'manage_pages' });

这是我正在做的伪代码

var myVariable -Fb.Api回调函数返回响应数组 - 遍历响应数组 - 根据该数组中的先前响应获取新的Response数组 - 遍历新响应数组的每个项目,并将其与myVariable进行比较。

问题是在响应到达之前循环结束时响应被延迟。因为我无法比较嵌套的项目与myVariable。

2 个答案:

答案 0 :(得分:0)

如果通过&#34; facebook页面&#34;您指的是商家页面/组织页面(不是个人资料),您可以通过检查端点&#39; / {{page_id}} / tabs / {{app_id}}来更轻松地获取相同的信息。

将page_id替换为您要检查的网页的ID,并将app_id替换为您的应用ID。我目前没有工作代码,但是这样的话:

FB.api(
    '/' + checkPageID + '/tabs/{{app_id}}',
    function (response) {
        // Do console.log(response) to figure out how to see if installed or not
    }
)

答案 1 :(得分:0)

你可以使用字段扩展:

https://developers.facebook.com/docs/graph-api/using-graph-api/v2.3#fieldexpansion

FB.api('/me/accounts', {fields: 'name, address{city}'},function (response) 
{
     //do something here.
}