在FB.api函数中创建数据的ojbect

时间:2016-03-31 12:03:39

标签: javascript arrays facebook facebook-graph-api jquery-callback

我正在尝试从Facebook获取用户的相册,我已经完成了这项工作,现在我需要使用albumID和albumCover在FB.api函数中创建一个对象。

因为FB.api是一个异步函数,所以我无法做到这一点。

这是我的代码:

var getUserAlbum = function () {
    var token = 'access token';
    var albums = [];
    FB.api(
        "/me/albums/", {'accessToken': token},
        function (album) {
            if (album && !album.error) {
                $(album.data).each(function (k, v) {
                    FB.api(
                        "/"+ v.id +"/picture",
                        function (albumCover) {
                            if (albumCover && !albumCover.error) {
                                var id = v.id;
                                var url = k.url;
                                $(albumCover.data).each(function (i, k) {
                                    albums.push({
                                        "id": v.id,
                                        "url": k.url 
                                    });
                                });
                            }
                        }
                    );
                });
                console.log(albums); // it is giving me blank array
                           //because it executes before FB.api ends
            }
        }
    );
   console.log(albums); // also blank here
}

1 个答案:

答案 0 :(得分:0)

你应该在回调中得到答案后继续,简单!这是处理异步(如ajax)请求的最明显方式。

代码:

var getUserAlbum = function () {
  ...
  ...
  FB.api(
      "/"+ v.id +"/picture",
      function (albumCover) {
          if (albumCover && !albumCover.error) {
              var id = v.id;
              var url = k.url;
              $(albumCover.data).each(function (i, k) {
                  albums.push({
                      "id": v.id,
                      "url": k.url 
                  });
              });
              // EDIT
              console.log(albums);
              proceed(albums);
          }
      }
  );
  ...
  ...
}

function proceed(albums) {
  // do whatever you want to do with the `albums` 
}