Javascript变量不变

Javascript变量不变,javascript,jquery,scope,Javascript,Jquery,Scope,我想修改这个vtiger函数,它在提交之前进行一些检查 我添加了globalvar,我想用它来检查表单是否可以提交。我可以在这里更改什么以获得所需的结果 函数结束时,globalvar应该是2或3,但它保持为1,我还添加了警报,设置警报以确保它到达这些点 registerRecordPreSaveEvent : function(form) { var thisInstance = this; if(typeof form == 'undefined') { f

我想修改这个vtiger函数,它在提交之前进行一些检查

我添加了
globalvar
,我想用它来检查表单是否可以提交。我可以在这里更改什么以获得所需的结果

函数结束时,globalvar应该是2或3,但它保持为1,我还添加了警报,设置警报以确保它到达这些点

registerRecordPreSaveEvent : function(form) {

    var thisInstance = this;
    if(typeof form == 'undefined') {
        form = this.getForm();
    }

    form.on(Vtiger_Edit_Js.recordPreSave, function(e, data) {
        var accountName = thisInstance.getAccountName(form);
        var recordId = thisInstance.getRecordId(form);
        globalvar = 1;

        var params = {};
        if(!(accountName in thisInstance.duplicateCheckCache)) {
            Vtiger_Helper_Js.checkDuplicateName({
                'accountName' : accountName, 
                'recordId' : recordId,
                'moduleName' : 'Accounts'
            }).then(
                function(data){
                   thisInstance.duplicateCheckCache[accountName+'_accounts'] = data['success'];
                   globalvar =2;

                },
                function(data, err){

                    thisInstance.duplicateCheckCache[accountName+'_accounts'] = data['success'];
                    thisInstance.duplicateCheckCache['message'] = data['message'];
                    var message = 'Company already exists';
                    Vtiger_Helper_Js.showMessage({'text' : message,'type': 'error'})
                }
            );
        }

        else {
            if(thisInstance.duplicateCheckCache[accountName+'_accounts'] == true){
                var message = 'Company already exists';
                    Vtiger_Helper_Js.showMessage({'text' : message,'type': 'error'})
            } else {
                delete thisInstance.duplicateCheckCache[accountName+'_accounts'];
                return true;
            }
        }
         if(!(accountName in thisInstance.duplicateCheckCache)) {
            Vtiger_Helper_Js.checkDuplicateName({
                'accountName' : accountName, 
                'recordId' : recordId,
                'moduleName' : 'Leads'
            }).then(
                function(data){
                    globalvar =3;
                    console.log(globalvar);
                    thisInstance.duplicateCheckCache[accountName+'_leads'] = data['success'];

                },
                function(data, err){

                    thisInstance.duplicateCheckCache[accountName+'_leads'] = data['success'];
                    thisInstance.duplicateCheckCache['message'] = data['message'];
                    var message = 'Lead already exists';
                    Vtiger_Helper_Js.showMessage({'text' : message,'type': 'error'})
                }
            );
        }

        else {
            if(thisInstance.duplicateCheckCache[accountName+'_leads'] == true){
                var message = 'Lead already exists';
                    Vtiger_Helper_Js.showMessage({'text' : message,'type': 'error'})
            } else {
                delete thisInstance.duplicateCheckCache[accountName+'_leads'];
                return true;
            }
        }
    console.log(globalvar);
        e.preventDefault();
    })
}

这段代码中有许多异步操作。异步操作在包含函数实际返回后的某个时间完成。因此,您不能在包含函数完成后立即使用异步操作的结果,因为异步操作本身仍在进行且尚未完成

因此,在异步操作(您正在执行)中设置
globalVar
,在包含函数完成时不会显示其值

使用异步操作结果的唯一方法是在表示异步操作已完成的回调中使用它,或者从该回调调用函数并向其传递所需的数据。这些是你的选择。你不能用你想做的方式去做

与这里的所有问题一样,如果您描述您试图解决的实际问题,而不是用您尝试的解决方案解释问题,我们可能会在更高的层面上提供帮助

在StackOverflow上,无法描述您真正想要完成的任务称为失败


您不能在异步响应中运行
e.preventDefault()
,因为在异步响应完成时,表单已经提交


您可能必须翻转逻辑,以便在所有异步操作完成且没有错误之前,不会提交表单。然后,您将手动提交表单。

您必须描述您试图解决的问题。现在,您所说的是您想要修改此代码,但您没有描述您的目标是什么或您试图实现什么。你提到的是“要求的结果”,但没有描述这是什么。另外,您是否意识到这段代码中存在异步操作?你知道这意味着什么吗?@jfriend00 globalvar在函数结束时应该是2或3,但它保持为1,我试图完成的可能重复的任务是仅在两次调用Vtiger\u Helper\u Js时提交表单。checkDuplicateName不返回errorBack,停止描述错误的解决方案,从一开始就描述你真正想要解决的问题。显然,您需要一种新的方法,但您甚至还没有描述实际问题,因此我们无能为力。@grasshopper-请编辑您的问题,描述代码更改的实际目标,以便阅读您的问题的任何人都可能知道您正试图实现的目标。为了帮助您为将来编写更好的问题,我建议您。@grasshopper-请参阅我在答案末尾添加的内容。感谢您解释异步操作,将这些调用的结果添加到另一个设置“globalvar”的函数中,为我解决了这个问题,非常感谢