Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Приостановить скрипт до получения ответа (https://javascript.ru/forum/dom-window/64380-priostanovit-skript-do-polucheniya-otveta.html)

vah-smile 07.08.2016 10:19

Приостановить скрипт до получения ответа
 
При работе с Google Maps возникла проблема: JavaScript работает быстрее чем запросы к Google Maps. Как можно приостановить скрипт до получения ответа?

for (var i=0; i<=5; i++)
{
  alert (i); // выдает поочередно: 1, 2, 3, 4, 5

  directionsService.route(request, function(response, status) 
  { 
    alert (i); // сразу выдает 5, а нужно 1, 2, 3, 4, 5
  });
}

vadim5june 07.08.2016 10:28

попробуйте ,что выдаст
alert(response)

ответ то там,

vah-smile 07.08.2016 11:29

Цитата:

Сообщение от vadim5june (Сообщение 424567)
попробуйте ,что выдаст
alert(response)

ответ то там,

alert выдал [object Object]

Coriolan161 07.08.2016 15:16

vah-smile,
Тут вообще дело походу не в скорости. То, что у тебя сразу 5 выдается говорит о том , что ты пропустил раздел 'Замыкания'

Rise 07.08.2016 18:24

vah-smile,
for (var i = 0; i <= 5; i++) {
	(function (i) {
		directionsService.route(request, function (response, status) {
			alert(i);
		});
	}(i));
}

warren buffet 08.08.2016 11:18

Цитата:

Сообщение от vah-smile
JavaScript работает быстрее чем запросы к Google Maps

Не то слово. Условно говоря жаба скрипт со скоростью света, а запросы ползут со скоростью звука. alert() тупо останавливает жабу как женщина - коня и поэтому счетчик показывает текущее значение. А потом он показывает последнее, поскольку i к тому времени уже давно достигло своего максимума и даже 100500 раз заюзалось другими функциями в том же скопе. То есть ты напиши вообще _после_ своего цикла i='nichesi' и в алерте получишь nichosi. Дошло?

Короче, тебе нужен калбек.

warren buffet 08.08.2016 11:20

Как господин Rise изобразил - тебе ТС все равно не надо. Там копируется твое i внутри функции, но ты просто не знал как делать и поэтому начал канонично с for. А тебе вообще фор не нужен.


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