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。   求问用什么方法可以实现异步函数中装变量。第二次调用正常拿到的。 或者能拿到异步函数的变量

 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
            });

 

问题解决了吗

localStorage 和 sessionStorage 属性允许在浏览器中存储 key/value 对的数据。

localStorage 用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去删除。

localStorage 属性是只读的。

提示: 如果你只想将数据保存在当前会话中,可以使用 sessionStorage 属性, 该数据对象临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据。