Как я могу сделать FB.call в цикле $ .each? - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь получить количество лайков от Facebook.

Звонки из Facebook работают нормально.Проблема в том, что все вызовы являются асинхронными.

У меня есть цикл для сообщений, и каждое сообщение должно возвращать количество лайков ... но поскольку вызовы асинхронные, я получаю номер после того, как цикл былготово.

У меня уже есть обратные вызовы и теперь $.Deferred, но все равно это не работает.

Может кто-нибудь мне помочь?Где моя ошибка?

Заранее благодарю за любую поддержку.

$(document).ready(function() {

  $.ajax({
    url: 'https://connect.facebook.net/en_US/sdk.js',
    dataType: 'script',
    cache: true,
    success:function(script, textStatus, jqXHR) {
      FB.init({
        appId     : '{my-app-id}',
        xfbml     : true,
        version   : 'v3.1'
      });

      // Call feed from Facebook
      callFBApi();

    }
  });

});

function callFBApi() {
  FB.api(
    '{my-feed-call}',

    function (response) {

      if (response && !response.error) {
        var posts = [];
        posts = response.data;


        getFieldsFromPost(posts);

      }
    }
  );
}

function getFieldsFromPost(posts) {

  var likes = 0;

  $.each(posts, function(index, post) {

    var combinedPromise = $.when(getLikesFromPost());

    combinedPromise.done(function(data){
      likes = data;
      console.log('New value:' + likes);
    });

    console.log(likes);

    console.log('Index: ' + index);

  });

}

function getLikesFromPost() {
  var deferred = $.Deferred();

  // Get number of likes from post by id
  FB.api(
    '{my-post-call}',

    function (postResponse) {
      if (postResponse && !postResponse.error) {
        deferred.resolve(postResponse.summary.total_count);
      }
    }
  );

  return deferred.promise();

}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...