Вы думаете о своей проблеме процедурно.Однако эта логика не работает каждый раз, когда вы работаете с асинхронными запросами.Я ожидаю, что то, что вы изначально пытались сделать, выглядело примерно так:
var pictures = getMyPhotos();
for (var i = 0; i < pictures.length; i++) {
// do something with each picture
}
Но это не работает, поскольку значение 'pictures' на самом деле не определено (это тип возврата по умолчанию для любой функции безопределен фактический возврат - это то, что делает ваш getMyPhotos)
Вместо этого вы хотите сделать что-то вроде этого:
function getMyPhotos(callback) {
FB.api('/me/albums', function (response) {
// process respose data to get a list of pictures, as you have already
// shown in your example
// instead of 'returning' pictures,
// we just call the method that should handle the result
callback(pictures);
});
}
// This is the function that actually does the work with your pictures
function oncePhotosReceived(pictures){
for (var i = 0; i < pictures.length; i++) {
// do something with each picture
}
};
// Request the picture data, and give it oncePhotosReceived as a callback.
// This basically lets you say 'hey, once I get my data back, call this function'
getMyPhotos(oncePhotosReceived);
Я настоятельно рекомендую вам поискать SO для получения дополнительных вопросов / ответов.о обратных вызовах AJAX и асинхронном программировании JavaScript.
EDIT:
Если вы хотите, чтобы результат вызова API FB был удобным для использования другим кодом, вы можете установить возвращаемое значение на 'глобальная переменная в окне:
function getMyPhotos(callback) {
FB.api('/me/albums', function (response) {
// process respose data to get a list of pictures, as you have already
// shown in your example
// instead of 'returning' pictures,
// we just call the method that should handle the result
window.pictures = pictures;
});
}
Теперь вы можете использовать глобальную переменную 'pictures' (или, явно используя window.pictures) где угодно.Подвох, конечно, в том, что сначала нужно вызвать getMyPhotos и дождаться завершения ответа, прежде чем они станут доступны.Нет необходимости в localStorage.