qq_875143287 2021-06-19 18:11 采纳率: 60%
浏览 131
已结题

js 异步操作函数无法用window对象赋值

​
​

this.onHookSuccess = function (eventsData, result, api) { // 异步函数
    console.log(window.matQty,'起点')
    if (api === "getMatAndGrid"){
        let dataDestination = eventsData.request.dataDestination;
        result.data.data = result.data.data&&result.data.data.length>0?result.data.data[0]:result.data.data;
        result.data.data.matStr1 = result.data.data.matStr1 === "0" ? "小件" : "大件";
        if(window.matCode){
         if(window.matCode === result.data.data.matCode){
             result.data.data.matQty = window.matQty+ window.matQty
             console.log(window.matQty,'赋值')
         }

        }else{
            result.data.data.matQty = window.matQty
        }
        window.matCode =  result.data.data.matCode




        this.setComponentData(dataDestination,result)
        console.log(window.localStorage)
    }
};


this["interceptParam"] = function (param, element, eventsData) {
    if (eventsData.request.api === "getMatAndGrid"&&element.propsValue.refName === "#matCode"){
        let barCode = param.matCode;
        let boardQty = 0;
        if (barCode.search("MADE IN JAPAN")>-1&&barCode.length >= 61){
            param.matCode = barCode.substring(50,61).trim();
            boardQty = parseInt(barCode.substring(24,30));
            window.matQty = boardQty
        }else if (barCode.length >= 19){
            let projCount = parseInt(barCode.substring(16,19));
            let dnStart = 19+projCount*5+27;
            let dnEnd = dnStart + 15;
            if (barCode.length >= dnEnd){
                param.matCode = barCode.substring(dnStart,dnEnd).trim();
                boardQty = parseInt(barCode.substring(dnEnd,dnEnd+7));
                window.matQty = boardQty
            }else {
                this.$store.dispatch("showMassage", {
                    type: "error",
                    message: "条码格式不正确",
                });
                throw "unrecognizable barcode content";
            }
        }else {
            this.$store.dispatch("showMassage", {
                type: "error",
                message: "条码格式不正确",
            });
            throw "unrecognizable barcode content";
        }

    } else if (eventsData.request.api === "updateOutManualPTL"){

    }
    return param;
}


​

​

 

代码如上图    看有打印的地方就行  

this.onHookSuccess 是一个异步请求的回调函数,我在里面用windows 对象给一个变量
window.matQty 赋值 如果名字相同则会累加,但是在执行第二次函数后出现了 变量依然是上次 就是12的情况 

问题是我打印赋值和起点的地方  一个赋值明明已经改变为24,但是第二次执行起点处却还是12。  这个变量是用全局的 window.matQty 装的,

正常第二次起点处应该是24。   求问用什么方法可以实现异步函数中装变量。第二次调用正常拿到的。 或者能拿到异步函数的变量

  • 写回答

3条回答 默认 最新

  • 清枫cc 2021-06-19 19:09
    关注

     ajax回调函数内部无法修改外部变量。
    如:前端发送ajax请求给后台需要查询该用户是否有审核权限,因此需要定义一个全局变量,将后台查询结果赋值给这个变量,在进行审核的时候对该变量进行判断,如果有审核权限,则允许该用户进行后续操作。
    但是在ajax回调函数内部无法修改外部变量,此时需要将ajax请求由异步请求改为同步请求,才会对全局变量赋值成功。
     

                $.ajaxSetup({
                    async: false
                });
                $.post('/interface/execute/sql', {
                    sqlId: '35334',
                    sqlType: '2',
                    sqlParamJson: JSON.stringify({
                        staffId:session.staff.staffId
                    })
                }, function (retList) {
                    retList = JSON.parse(retList);
                    if(retList.length>0){
                        isRole=true;
                    }
                });
                $.ajaxSetup({
                    async: true
                });
    
    评论

报告相同问题?

悬赏问题

  • ¥15 mmocr的训练错误,结果全为0
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀