DrunkMaster
@DrunkMaster

Как подождать результата запроса (отключить асинхронность)?

Есть такой код на JS:
var Need;

function XHRfunc(data) {
  var XHR = ("onload" in new XMLHttpRequest()) ? XMLHttpRequest : XDomainRequest; var xhr = new XHR();
  xhr.open('GET', 'http://......................com', true);
  xhr.onload = function() {
    Need = this.responseText;
    console.log(Need); // Внимание 1
  }
  xhr.onerror = function(){ }
  xhr.send();
}

XHRfunc('go'); // Это запуск функции

function OtherFunc(data) {
  console.log(Need); // Внимание 2
}

Смысл в том, что сначала должна отработать функция XHRfunc() в ней присваивается значение глобальной переменной Need которая используется в следующей функции OtherFunc().
На деле в консоли видно сто сначала отрабатывает код с пометкой "Внимание 2" и только внизу кода приходят данные и срабатывает "Внимание 1", как правильно сделать что бы OtherFunc() не запускалась пока нет данных или выход из XHRfunc не производился?
  • Вопрос задан
  • 1047 просмотров
Решения вопроса 2
async или обещания
var Need;

function XHRfunc(data) {
	return new Promise((resolve, reject) => {
		if (Need) return resolve(Need);

		var XHR = ("onload" in new XMLHttpRequest()) ? XMLHttpRequest : XDomainRequest; var xhr = new XHR();
		xhr.open('GET', 'http://......................com', true);
		xhr.onload = function() {
			Need = this.responseText;
			resolve(Need);
		}

		xhr.onerror = function(){
			reject();
		}

		xhr.send();
	});
}

function OtherFunc(data) {
	XHRfunc('go').then(Need => {
		console.log(Need);
	});
}

привет говно код, но это просто пример
Ответ написан
Комментировать
KorniloFF
@KorniloFF Куратор тега JavaScript
Работаю по font-end / JS
xhr.open('GET', 'http://......................com', false);

Заменить эту строку на приведенную выше.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
megafax
@megafax
web-программист
Используйте событийную модель, либо callback-модель. Смысл в том, чтобы вызывать функцию OtherFunc уже в onload. А делать синхронным AJAX-запрос - при медленном соединении, либо при большой загруженности сервера у Вас зависнет всястраница, что плохо отразится на пользователе.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы