js执行顺序

1、前言:

一直做后端开发,因为这段时间前端手里都有活,想着自己好歹也学过js,bootstrap也改过,就自己上吧,都是语言,不就跟写java差不多嘛!!!结果就遇到了感觉莫名其妙的问题,让我对js的执行顺序感到深深的好奇

2、遇到的问题:

简单描述下我写的方法比较好理解一些,如方法及结果下图。其中  getListByCompCodeAndFitName是调用后端做的一个查询,最终想要输出的结果是多个错误拼接结果。

 在各个方法前中后都加了日志打印,在父方法之后又输出一个结果打印。结果日志打印如下:

有些理解不了这个执行顺序,所以找了下信息:

js事件执行顺序 - 蛙仔 - 博客园

简单来说就是js中的事件分同步和异步两种,先执行同步再执行异步, getListByCompCodeAndFitName是调用后端的方法,属于异步。因此是在所有同步时间执行结束之后它才执行的。

3、解决办法

知道原因了,就开始探究解决办法,我肯定是想让同步事件在getListByCompCodeAndFitName执行之前等等它,让异步事件执行完之后把结果带出来的。

所以还得找找办法,第一想到的就是加时间等待一会,可能会出现的问题是后端访问超时,这个要等待的时间就不能确定是多长了。值确定起来有点麻烦效果可能还不怎么好。

在找的过程中了解到了async、promise对象,虽然不知道怎么用的,但是大概率就是用这两种方式来解决这个问题。

后来在试的过程中问了下同事,改正了一下:主要是把async: false参数改成了false,不允许异步。

然后就得到了我想要的打印顺序!

function getListByCompCodeAndFitName(obj,dataJson,result,j){
    $.ajax({
        type: "POST",
        contentType: 'application/json;charset=UTF-8',
        dataType: "json",
        async: false,
        url: baseURL + '/base/finProfitCenter',
        data: JSON.stringify(dataJson),
        success: function (data1) {
            if (data1.length == 0) {
                result.push("第"+(j+1)+"行利润中心错误")
                console.log("打印查询checkAndNotifyLineData中1getListByCompCodeAndFitName中:"+ result)
            } else {
                console.log("打印1"+ JSON.stringify(data1))
                obj.attribute1 = data1.attribute1;
                obj.profitCenterCode = data1.profitCenterCode;
            }
        },
        error: function () {
            result.push("利润中心查询失败")
        }
    });
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值