Дождитесь завершения функции JavaScript, прежде чем продолжить - PullRequest
0 голосов
/ 23 сентября 2018

Это может быть не сложный вопрос, но я не уверен, что нахожусь на правильном пути.

Моя цель - сначала запустить функцию JavaScript, а когда выполнение будет полностью завершено (этоможет занять до нескольких секунд, но не всегда) закрыть окно.

Функция и закрытие запускаются только одной кнопкой:

<button id="myID">Click me</button>

Код JavaScript:

<script type="text/javascript">
    function someFunction() {
        // do some stuff
    }

    document.getElementById('myID').addEventListener("click", function(){
        someFunction();
        window.close();
    });
</script>

Это прекрасно работает, но может ли кто-нибудь дать совет, если это надежный метод или нет?Важно, чтобы выполнение функции было полностью завершено до запуска window.close () .

Ответы [ 4 ]

0 голосов
/ 23 сентября 2018

someFunction () выполняет некоторые манипуляции с DOM после загрузки страницы

Это синхронно (браузер может отложить рендеринг, но здесь речь идет о миллисекундах), и поэтому это гарантировано.что манипулирование DOM выполняется до того, как функция вернется.

0 голосов
/ 23 сентября 2018

Вы можете поместить window.close() прямо под alert();.Однако, если вы хотите добавить больше асинхронных элементов, вам нужна функция обратного вызова, подобная этой.

<script type="text/javascript">
    var closeWindow = function() {
        window.close();
    };

    function someFunction(callback) {
        alert('hi');
        callback();
    }

    document.getElementById('myID').addEventListener("click", function(){
        someFunction(closeWindow);
    });
</script>
0 голосов
/ 23 сентября 2018

Возможны следующие варианты:

  1. положить window.close(); в функцию обратного вызова
  2. использовать обещания. Таким образом, вы можете контролировать выполнение обратного вызова / наличие ошибки, которую вы можете обработать.лучше и не закрывать окно /
0 голосов
/ 23 сентября 2018

Синхронный javascript всегда будет запускаться в порядке сверху вниз и всегда будет гарантировать, что инструкция 1 будет завершена до инструкции 2.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...