Цепь обещаний не работает в угловых js [дубликат]

У меня есть это решение только для мобильных устройств (протестировано с Android):

jQuery(function($){

zoom_level = function(){

    $("body").prepend('<div class="overlay" ' +
                'style="position:fixed; top:0%; left:0%; ' +
                'width:100%; height:100%; z-index:1;"></div>');

    var ratio = $("body .overlay:eq(0)").outerWidth() / $(window).width();
    $("body .overlay:eq(0)").remove();

    return ratio;
}

alert(zoom_level());

});

Если вы хотите, чтобы уровень масштабирования сразу после перемещения пинча, вам, вероятно, придется установить небольшой тайм-аут из-за (но я не уверен, потому что я его не тестировал).

2
задан Nathan Tuggy 25 December 2014 в 09:10
поделиться

2 ответа

Функциональный объект в JavaScript - это одно. Вызов функции - это другое дело. Вы используете последний, включив круглые скобки после имени функции *, но вам нужен первый, без круглых скобок. Это позволяет setTimeout позже вызвать эту функцию, используя переданный объект. Предполагая, что вам действительно нужно 5 секунд (а не 50 секунд, которые использовал исходный код):

setTimeout(GetUsersNumber, 5000);

* Действительно, любая старая переменная, содержащая объект функции, может быть вызвана так, но для удобства определение функции также определяет имя переменной для нее.

2
ответ дан Nathan Tuggy 22 August 2018 в 13:12
поделиться

setTimeout принимает функцию как параметр. То, что вы делаете, сразу же выполняет функцию и передает возвращаемое значение функции exected. Пропустите GetUsersNumber вместо GetUsersNumber(). () уже выполняет функцию.

setTimeout(GetUsersNumber, 50000);

На боковой ноте:

  • Большинство современных браузеров поддерживают XMLHttpRequest изначально. Таким образом, использование ActiveXObject не требуется.
  • Для старых браузеров условие if в любом случае даст ошибку. Сделайте это: if(window.XMLHttpRequest)
3
ответ дан gp. 22 August 2018 в 13:12
поделиться
Другие вопросы по тегам:

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