Это правда, вы не хотите использовать setInterval и setTimeout, как вы описали. Что вы действительно хотите сделать, так это просто освоиться с вложенными функциями, где вы можете писать более или менее синхронно.
Например:
XHR.get(your_data, function()
{
//what you would have done "synchronously"
});
Хотя вы можете использовать setInterval и / или setTimeout (с вызовами setTimeout снова в теле функции), чтобы «опросить» код успеха, этот подход значительно уступает просто обработке обратного вызова в первую очередь вместо опроса для Это. Он вносит задержку, уходит с процессором и не масштабируется по нескольким запросам XHR, чтобы назвать несколько недостатков.
XHR будет вызывать вашу функцию, когда она завершится, бессмысленно запускать функцию, спрашивающую: «Мы уже закончили? Мы уже закончили?» в это время. С другой стороны, если есть какое-то периодическое поведение, которое вы хотите заблокировать, пока ответ не вернется (например, часть анимации, для которой нужны эти данные), вполне допустимо заключить блокирующий код в оператор if:
var tick = window.setTimeout(tock, 20);
var tock = function()
{
if (response_done)
{
// dependent code
}
tick = window.setTimeout(tock, 20);
}
XHR.get(your_data, function() { /*Handle response*/ response_done = true; });