Javascript SDK:我可以在FB.api()中调用另一个FB.api()吗?

Javascript SDK: can i have another FB.api() calls inside FB.api()

本文关键字:FB api 调用 另一个 SDK 我可以 Javascript      更新时间:2023-09-26
// count total no. of groups created by me
function totalGroups(response) {
    FB.api('/me/groups', {fields:'owner'}, function(g_response) {
        for (i in g_response.data) {
            FB.api('/me', function(m_response) {
                var c = 0;
                if (g_response.data[i].owner.name == m_response.name) {
                    c++;
                }
            });
        }
        console.log('Total:' +c);
  });
}

嗨,我可以在FB.api()内部有另一个FB.api()调用,就像我在上面的代码中做的那样,因为我无法获得的值如果(g_response.data[i].owner.name == m_response.name)

是的,你可以将FB.api()调用嵌入到另一个FB.api()调用中,但是流是保证的,因为FB.api()调用是异步的。我在你的代码中发现的一个问题与var c有关。首先,它超出了console.log('Total:' +c)方法的范围,而且你已经在循环中声明了它,这意味着它的值将在每次循环执行后重置。

试试这个:

// count total no. of groups created by me
function totalGroups(response) {
    var c = 0;
    FB.api('/me/groups', {fields:'owner'}, function(g_response) {
        for (i in g_response.data) {
            FB.api('/me', function(m_response) {               
                if (i.owner.name == m_response.name) {
                    c++;
                }
            });
        }
        console.log('Total:' +c);
});
}

这就是我如何解决这个问题,我知道这很难看,但这是我目前能做的最好的。

function totalGroups(response) {
    var c = 0;
    FB.api('/me', function(m_response) {
        FB.api('/me/groups', {fields:'owner'}, function(g_response) {
            for (i in g_response.data) {            
                if (g_response.data[i].owner) {
                    if (g_response.data[i].owner.name == m_response.name) {     
                        c++;
                    }
                }
            }
            console.log('Total: ' + c);
        });
    });
}