Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Последовательный вызов функций (https://javascript.ru/forum/misc/62504-posledovatelnyjj-vyzov-funkcijj.html)

max_fruit 13.04.2016 20:57

Проблема с областью видимости.
 
Всем привет! Пытаясь работать с VK open API, столкнулся вот с какой задачей:
Почему не получается отобразить startFrom в консоли?
var startFrom = ""; // Глобальная переменная
// делаю запрос к vk api
    function s1() {  VK.api("newsfeed.search", {"v":"5.50","q":"привет", "extended":"1", "count":"200", "fields":"photo_50"}, function(data) { 
// получаю response и извлекаю нужные данные
             
        startFrom = data.response.next_from; // next_from - номер следующей страницы, который используется для извлечения максимального количества постов
       // извлечение параметров профиля
        var profilesCount = data.response.profiles.length;
                            
                            var profilesStr = '';
                            
                            for (var i=0; i<profilesCount; i++) {
                                
                                profilesStr +='<img src=' + data.response.profiles[i].photo_50 + '>' + '<a href="https://vk.com/id' + data.response.profiles[i].id + '"' + '>' + data.response.profiles[i].first_name + ' ' + data.response.profiles[i].last_name + '</a>' +  '<br/>';
                                
                            
    document.getElementById('friends_list').innerHTML = profilesStr + startFrom; // вставляю данные в html
                            }

    });
                          
                  }
    
$.when(s1()).done(function () {console.log(startFrom);}); // пытаюсь сделать последовательный вызов, при котором следующая функция выполнится только после завершения предыдущей


В html startFrom вставляется без проблем, но вот в консоль я его значение вывести не могу (пишет Uncaught ReferenceError: starFrom is not defined). И еще один момент: если
console.log(starFrom); заменить, например, на alert("Hello world!");, то alert выполнится, но до того, как в html будут вставлены результаты запроса, а если alert(startFrom), то всплывает пустое окно. ЧЯДНТ?

max_fruit 18.04.2016 18:35

Уже давно ответил на свой вопрос, но тут подумал, что надо бы и сюда написать ответ. Я понимаю, что это элементарные вещи (но не для меня:) ), но вдруг кому-то пригодится решение.
var startFrom; // Всё та же глобальная переменная.

function s1() { Vk.api({/* Всё, что написал выше*/}, function(data) {
startFrom = data.response.next_from;
// Далее идет кусок кода из вопроса.

function s2() {      //Тут же, внутри функции s1, создаю еще одну     функцию
console.log(startFrom); // Теперь всё работает
}
});
} // Функция s1 закончилась
s1();


Часовой пояс GMT +3, время: 00:25.