我需要帮助才能在同步模式下调用FB.api()

时间:2012-02-09 14:30:41

标签: javascript facebook

我遇到了在for循环中运行FB.api的问题。

for(var i = 0; i < commentObjectLength; i++){
    var fbFeedID = commentObject.OwnCommentList[i].fbFeedID;
    var OwnCommentID = commentObject.OwnCommentList[i].OwnCommentID;
    var accessToken = commentObject.OwnCommentList[i].accessToken;
    var commentText = commentObject.OwnCommentList[i].commentText;
    alert("Hiii"); //  >>>>>>>1

    FB.api('/' + fbFeedID + '/comments', 'post', {
            message: commentText,
            access_token : accessToken
        }, function (response) {
            if (!response || response.error){
                //alert(response.error.message);
            } else {
                alert("Hello"); //  >>>>>>>2
                alert(response.id); //  >>>>>>>3
            }
        });
}

现在以简单的方式讲述。
我期待像警告一样警惕 1→ HIII
2→你好
3→一些回复id 4-&GT; HIII
5→你好
6-&GT;一些共鸣id

但实际上我会像中国人一样出局 1→ HIII
2→ HIII
3→ Hiii

继续直到循环大小
8-&GT;你好
9-&GT;一些回复id 10→你好
11-&GT;一些响应ID继续

问题是循环的最后日期将一直转到Facebook并对Feed进行评论。不是单独的。

所以请任何人帮我解决这个问题。我苦苦挣扎。
(希望每个人都能理解问题,需要任何额外的信息,请询问)

2 个答案:

答案 0 :(得分:0)

FB。*是基于事件的,有一些技巧可以让它更加同步,但它不会起作用。你需要链接你的函数调用。

for(var i = 0; i < commentObjectLength; i++){
    var fbFeedID = commentObject.OwnCommentList[i].fbFeedID;
    var OwnCommentID = commentObject.OwnCommentList[i].OwnCommentID;
    var accessToken = commentObject.OwnCommentList[i].accessToken;
    var commentText = commentObject.OwnCommentList[i].commentText;

    FB.api('/' + fbFeedID + '/comments','post',{
            message: commentText,
            access_token : accessToken
        }, function (response) {
            alert("Hiii"); //  >>>>>>>1
            if (!response || response.error){
                //alert(response.error.message);
            } else {
                alert("Hello");//  >>>>>>>2
                alert(response.id); //  >>>>>>>3
            }
        });
}

答案 1 :(得分:0)

你需要更进一步学习Closures它将为你提供适当的解决方案。

闭包为您提供了一种方法,可以将所有变量值保存在自己的函数调用中,这就是为什么当FB.api将返回带有响应的代码时,所有局部变量在调用FB.api时将具有相同的值。我相信这会解决你的问题。