陈浩南的楠 2021-11-19 10:13 采纳率: 50%
浏览 83
已结题

JS怎么彻底执行完一个函数再去执行下一个函数?

现在遇到的问题是:我在点击按钮获取数据的时候,等待框转的时候执行耗时计算方法,这个时候已经禁用掉另一个按钮的click事件,我想在耗时计算方法完成之后再去恢复那个按钮的click事件,可总是在耗时计算方法的间隙就把那个恢复click事件执行了,怎么在那个耗时计算彻底结束后再去执行恢复click事件呢??


//监听按钮获取数据
document.getElementById('Weigh').onclick = function() {
        mui.showLoading("正在获取数据...", "div");//等待框
        document.getElementById('btn1').onclick=null//防止计算的时候点击另一个按钮,导致程序崩掉,所以就先禁用掉onclick
        setTimeout(function() {
            getWeight()//耗时计算方法
            mui.hideLoading();//隐藏等待框
        }, 2000);
    }

//耗时计算的方法
function getBoxWeight() {
        WebViewJavascriptBridge.callHandler(
            'getWeight', {
                'param': ""
            },
            function(responseData) {
                if (responseData != "false") {
                    var Weight = document.getElementById("weight");
                    Weight.value = responseData;
                }
            }
        );
    }

//想要恢复之前禁用的按钮的onclick
function huifu(){
    document.getElementById('div1').onclick=fn1()
}
  • 写回答

2条回答 默认 最新

  • 达娃里氏 2021-11-19 10:38
    关注

    js方法执行是同步的,也就是说一前一后两个function并不是按照代码编写顺序执行的,两个function是同时执行的。就你的问题而言,你想要先执行getBoxWeight方法然后再执行huifu方法,这样的话,你就需要实现异步。js的异步函数需要使用async、await关键字,具体的使用方法你可以去查看MDN的async函数(MDN是学js必备的神器)。
    你的代码可以改为这样:

     
    async function asynchronousFunction() {
        //监听按钮获取数据
        document.getElementById('Weigh').onclick = function() {
                mui.showLoading("正在获取数据...", "div");//等待框
                document.getElementById('btn1').onclick=null//防止计算的时候点击另一个按钮,导致程序崩掉,所以就先禁用掉onclick
                setTimeout(function() {
                    getWeight()//耗时计算方法
                    mui.hideLoading();//隐藏等待框
                }, 2000);
            }
        //耗时计算的方法
        await function getBoxWeight() {
                WebViewJavascriptBridge.callHandler(
                    'getWeight', {
                        'param': ""
                    },
                    function(responseData) {
                        if (responseData != "false") {
                            var Weight = document.getElementById("weight");
                            Weight.value = responseData;
                        }
                    }
                );
            }
        //想要恢复之前禁用的按钮的onclick
        await function huifu(){
            document.getElementById('div1').onclick=fn1()
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月13日
  • 已采纳回答 12月5日
  • 修改了问题 11月19日
  • 创建了问题 11月19日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度