等待JavaScript函数完成后再继续

时间:2018-09-23 19:41:16

标签: javascript asynchronous callback

这可能不是一个复杂的问题,但是我不确定我是否在正确的轨道上。

我的目标是首先运行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 :(得分:4)

您可以将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>

答案 1 :(得分:2)

同步javascript将始终按自上而下的顺序运行,并且始终保证第一条指令将在第二条指令之前完成。

但是,还有一个异步部分(您在这里没有它,但是例如ajax请求通常是异步的),它以不同的方式执行,并且需要callbacks / promises

答案 2 :(得分:0)

您的选择是:

  1. window.close();放入回调函数
  2. 使用允诺以这种方式可以控制回调执行/如果有错误则可以更好地处理它并且不关闭窗口/

答案 3 :(得分:0)

  

someFunction()在页面加载后执行一些DOM操作

那是同步的(浏览器可能会延迟渲染,但是此处讨论的是毫秒),因此可以确保在函数返回之前完成DOM操作。