0

Kullanıcının albümünü facebook'tan almaya çalışıyorum, şimdi bununla ilgili yaptım, FBIDA işleviyle albümID ve albumCover ile bir nesne oluşturmam gerekiyor.FB.api işlevinin içinde bir veri oluşturma

FB.api eşzamansız bir işlev olduğundan, bu yüzden bunu yapamıyorum.

İşte benim kodudur:

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 
} 

cevap

0

Eğer geri aramasında yanıtı basit olsun sonra devam etmelisiniz! Async (ajax gibi) isteklerini ele almanın en belirgin yolu budur.

Kodu:

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` 
} 
İlgili konular