Как перебрать меня / друзей и назначить каждому пользователю его изображение из {USERID} / изображение из FB.api - PullRequest
1 голос
/ 30 января 2012

Используя javascript, я получаю список друзей из Facebook, хотя теперь он возвращает только имя и идентификатор, но мне нужно получить фотографию каждого пользователя. Я пытаюсь перебрать ответ, а затем пытаюсь вызвать API для получения изображения, но из-за его асинхронного вызова я не могу связать возвращаемое изображение с индексом друга в массиве. * это какая-то проблема, с которой я столкнулся при асинхронном программировании в целом, есть ли стандартный шаблон для этого?

Пример.

FB.api('me/friends', function(response) {
    if(response.error == null){
        var friendsSale = response.data;
        var len = friendsSale.length;
        for(var x=0; x<len; x++){               
                FB.api(friendsSale[x].id+'/picture', function(response) {
                    //x no longer is the same x as the initial call, and I can't pass in the orignal array object into the FB.api function to return as part of the response... or can I?
                    friendsSale[x].pictureUrl = response;
                });
            }
        }
        //Then how do I know when I have all the pictures set so I can then set datamodle with the complete friend array?
        m.friends(friendsSale);
    }
});

Ответы [ 2 ]

2 голосов
/ 30 января 2012

Да, есть шаблон для этого: Закрытие

    ...
    var len = friendsSale.length;
    for (var i = 0; i < len; i++) {
        (function() {
            var j = i;             
            FB.api(friendsSale[i].id+'/picture', function(response) {
                friendsSale[j].pictureUrl = response;
            });
        })();
    }

Чтобы узнать, когда все вызовы вернулись, вы можете просто сохранить счетчик возвращенных вызовов, например,

    ...
    var len = friendsSale.length;
    var returnedCallsCounter = 0;

    for (var i = 0; i < len; i++) {
        (function() {
            var j = i;             
            FB.api(friendsSale[i].id+'/picture', function(response) {
                friendsSale[j].pictureUrl = response;

                // Track number of returned calls
                returnedCallsCounter++;

                // Check if all calls have returned
                if (returnedCallsCounter == len) {
                    m.friends(friendsSale);
                }
            });
        })();
    }
2 голосов
/ 30 января 2012

Простое решение для вас:
Все, что вам нужно сделать, это запросить это:
https://graph.facebook.com/user_id/picture
и вы получите изображение профиля пользователя. Например:

Запрос https://graph.facebook.com/4/picture (кстати, без токена доступа - попробуйте в режиме chrome pron в режиме инкогнито):
<img src="https://graph.facebook.com/4/picture">

получит это улыбающееся лицо:
enter image description here

Теперь вы знаете, Marks fbid: P

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...