Мне нужна помощь для вызова FB.api () в синхронном режиме - PullRequest
0 голосов
/ 09 февраля 2012

У меня проблема с запуском FB.api в цикле for.

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-> некоторый идентификатор ответа
4-> Hiii
5-> Привет
6-> некоторый резонансный идентификатор

Но на самом деле я выхожу как
1-> Hiii
2-> Hiii
3-> Hiii

продолжается до размера цикла
8-> Привет
9-> некоторый идентификатор ответа
10-> Привет
11-> Идентификатор ответа продолжается

Проблема в том, что последняя дата цикла будет идти на Facebook и комментировать ленту новостей. Не отдельно.

Так что, пожалуйста, помогите мне решить эту проблему. Я много борюсь.
(Надеюсь, что каждый может понять проблему, нужна дополнительная информация, пожалуйста, спросите)

Ответы [ 2 ]

0 голосов
/ 04 мая 2013

Вам нужно будет пойти немного дальше и изучить Замыкания Это даст вам правильное решение этой проблемы.

Замыкания дают вам возможность сохранить все значения переменных в своем собственном вызове функции, поэтому, когда FB.api вернется в ваш код с ответом, все локальные переменные будут иметь одинаковое значение, когда FB.api былназывается.Я уверен, что это решит вашу проблему.

0 голосов
/ 13 февраля 2012

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
            }
        });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...