如何在$ .each循环中进行FB.call?

时间:2018-09-24 09:24:57

标签: javascript jquery asynchronous facebook-graph-api

我正在尝试从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>

0 个答案:

没有答案