为什么会先弹出的undefined,在弹出的layer“确定取消”,点确定之后,先弹1,再弹2,最后才是“感谢...”?

<script>
function confirm_1(){
    layer.confirm('确认提交?', 
            
        {
          btn: ['确定','取消'] //按钮
        }, 
        function(){
        alert(1)
          layer.msg('感谢您参与平台调研,稍后会有工作人员联系您!', {icon: 1});
          alert(2)
          return true;
          alert(3)
        },
        function(){
            layer.msg('已取消!', {icon: 1});
            return false;
        }
    );
}

confirm_1();
alert(confirm_1());
</script>
阅读 4.4k
4 个回答

问题在于dom的渲染是异步的,而alert是同步的,所以才出现明明alert在后面为什么先出来的现象

confirm_1()没有返回值,所以是undefined,alert(1)和alert(2)在layer的回掉函数里,不是立即运行的,是点击确定后再运行的

新手上路,请多包涵

那么如何解决异步的问题,想要同步怎么弄

js线程和css线程是互斥的,如果你想先看到提示再alert(2),控制台打断点。
可以理解为,实际上layer提示是执行了,但是渲染的时候被js线程阻塞了。
如有错误,多多指教。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题