Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Очередность выполнения событий (https://javascript.ru/forum/misc/49200-ocherednost-vypolneniya-sobytijj.html)

Fedya 02.08.2014 17:06

Очередность выполнения событий
 
Здравствуйте.

Хочу вызывать метод и получать от него данные, то есть:
Api.js
function Api(token, phone) {
    this.access_token = token;
    this.access_phone = phone;
    
    this.getCode = function(phone) {
    	$.get("http://link/method/getCode", {key: "key", phone: phone}, function(data){
    		data = JSON.parse(data);
    		console.log(data); // => Выводит ответ, все ок
    		
    		return data;
    	});
    }
}


Page.js
api = new Api("", "");
json = api.getCode(phone);
console.log(json); // => возвращает undefined


Так получается потому что
console.log(json);

не ждет, пока getCode выполнит свой запрос.

Скажите, пожалуйста, как сделать, чтобы сначала выполнилось это
json = api.getCode(phone);

и только потом
console.log(json);

MallSerg 02.08.2014 17:29

Вопрос задан неверно
ты просто немного не понимаешь как работает механизм ajax запросов

У тебя есть функция
.getCode = function(phone) { $.get( .... ) }

важно понимать что $.get() это вызов функции с определенными параметрами.
Последним параметром передается функция которая будет вызвана в будущем когда будет получен ответ от сервера
т.е. к тому моменту getCode уже успеет завершится
т.е.
.getCode = function(phone) { $.get( .... ) }
просто вызывает $.get( .... ) и завершается и не возвращает никакого значения

Fedya 02.08.2014 17:34

Как тогда сделать как я хочу? никак?

То есть придется все писать в page.js?

MallSerg 02.08.2014 17:47

Как я понимают твоя задача в том что бы сделать определенные действия после того как получишь нужный тебе json
1. ты можешь делать нужную тебе работу в функции обратного вызова (callback)
2. ты можешь вызвать функцию которая сделает нужные беде действия
3. ты можешь выполнить запрос сихронно (никогда так не делай) т.е. будет остановлена любая активность на странице пока не будет получен ответ от сервера. после этого скрипт продолжит свое выполнение


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