Задать вопрос
@pr0kazn1k

Как решаются стандартные проблемы с асинхронностью javascript?

Какие изменения необходимо внести чтобы, в r уже лежал массив после вызова метода get, проблема в том, что метод может отрабатывать до 2 секунд. Так же необходимо использовать класс, так как есть еще методы. Возможно, что это ужасный код, но он по крайне мере работает. Буду очень благодарен, если вы дадите несколько советов.

function Class(){
    this.result;
}

Class.prototype.get = function(){
    play();
        
    function play(){
        /*Запросы, выполняются какое-то время*/
        setTimeout(function(){
            this.result = 'array';
        }, 1500);
    }
    
    return this.result;
}

c = new Class();
r = c.get();
// необходимо чтобы в r уже лежал array
console.log(r);
  • Вопрос задан
  • 2230 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 3
@an23
Используй Deffered object.
api.jquery.com/category/deferred-object
В твое случае
function Class(){
    this.result;
}

Class.prototype.get = function(){
    var dfd = new jQuery.Deferred();
    play();
        
    function play(){
        /*Запросы, выполняются какое-то время*/
        setTimeout(function(){
            this.result = 'array';
            dfd.resolve(this.result);
        }, 1500);
    }
    
    return dfd.promise();
}

c = new Class();

$.when(c.get()).done(function(res) {
    var r = res;
    console.log(r);
});


Пример с использованием Jquery Deffered
Ответ написан
Здравствуйте

Например так
function Class(){
    this.result;
}

Class.prototype.get = function(onComplete){
    play();
        
    function play(){
        /*Запросы, выполняются какое-то время*/
        setTimeout(function(){
            this.result = 'array';
            onComplete(this.result);
        }, 1500);
    }
}

c = new Class();
c.get(
	function(result){ console.log(result); }
);
// необходимо чтобы в r уже лежал array
Ответ написан
mainameiz
@mainameiz
Full-stack web-developer
Если я правильно помню, о в js можно сделать синхронный запрос, т.е. страница и ваш скрипт "зависнет" на время выполнения запроса. Если же вы хотите использовать именно setTimeout, то без коллбэков не обойтись.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы