如何在子函数(JavaScript)中更改函数的返回值

如何在子函数(JavaScript)中更改函数的返回值,javascript,function,scope,Javascript,Function,Scope,当检测到假日时,我无法使以下函数返回true。警报将正确触发,但结果始终返回false。我知道这是一个可变范围的问题,但我不确定如何正确地解决它 函数isHoliday(日期,当前省份){ var calDate=新日期(日期); var结果=假; 美元( “@Url.Content(“~/Holidays/HolidayList/?province=”)”+currentProvince, 功能(数据){ 对于(h=0;h,正常函数返回并退出该函数 相反,当执行异步ajax请求时,它必须任意等

当检测到假日时,我无法使以下函数返回true。警报将正确触发,但结果始终返回false。我知道这是一个可变范围的问题,但我不确定如何正确地解决它

函数isHoliday(日期,当前省份){
var calDate=新日期(日期);
var结果=假;
美元(
“@Url.Content(“~/Holidays/HolidayList/?province=”)”+currentProvince,
功能(数据){

对于(h=0;h,正常函数返回并退出该函数

相反,当执行异步ajax请求时,它必须任意等待,直到请求完成并发送回您为止

因此,当函数执行ajax调用时,不能依赖函数返回值

解决此问题的一个好方法是在函数中写入回调,如下所示:

function isHoliday(date,currentProvince, myCallback) {
    var calDate = new Date(date);
    var result = false;
    $.get("@Url.Content("~/Holidays/HolidayList/?province=")"+currentProvince, function(data) {

        myCallback();

    });
}

var callback = function() {
    for (h=0; h<data.length; h++) {
        holidayDate= new Date(parseInt(data[h].date.replace("\/Date\(","").replace("\)\/","")));
        if (holidayDate.getTime() == calDate.getTime()) {
            alert("HOLIDAY");
            result = true;
        }
    }
    //do whatever else you need to do after the ajax completes
};

isHoliday("12/01/19", "someProvince", callback);
函数isHoliday(日期、当前省份、myCallback){
var calDate=新日期(日期);
var结果=假;
$.get(“@Url.Content(“~/Holidays/HolidayList/?province=”)”+currentProvince,函数(数据){
myCallback();
});
}
var callback=function(){

对于(h=0;h,正常函数返回并退出该函数

相反,当执行异步ajax请求时,它必须任意等待,直到请求完成并发送回您为止

因此,当函数执行ajax调用时,不能依赖函数返回值

解决此问题的一个好方法是在函数中写入回调,如下所示:

function isHoliday(date,currentProvince, myCallback) {
    var calDate = new Date(date);
    var result = false;
    $.get("@Url.Content("~/Holidays/HolidayList/?province=")"+currentProvince, function(data) {

        myCallback();

    });
}

var callback = function() {
    for (h=0; h<data.length; h++) {
        holidayDate= new Date(parseInt(data[h].date.replace("\/Date\(","").replace("\)\/","")));
        if (holidayDate.getTime() == calDate.getTime()) {
            alert("HOLIDAY");
            result = true;
        }
    }
    //do whatever else you need to do after the ajax completes
};

isHoliday("12/01/19", "someProvince", callback);
函数isHoliday(日期、当前省份、myCallback){
var calDate=新日期(日期);
var结果=假;
$.get(“@Url.Content(“~/Holidays/HolidayList/?province=”)”+currentProvince,函数(数据){
myCallback();
});
}
var callback=function(){

对于(h=0;h您的get请求是异步的,但javascript继续执行。因此,它在处理get请求之前到达
返回结果
。您的get请求是异步的,但javascript继续执行。因此,它在处理get请求之前到达
返回结果

函数返回在ajax调用完成之前;这就是
$.get
中回调的目的,也是异步的原因

如果您想从这个ajax调用中获得结果,那么您需要将其余的逻辑连接到这个调用的回调,如下所示:

function isHoliday(date,currentProvince, callback) {

                var calDate = new Date(date);
                $.get("@Url.Content("~/Holidays/HolidayList/?province=")"+currentProvince, function(data) {
                    for (h=0; h<data.length; h++) {
                        holidayDate= new Date(parseInt(data[h].date.replace("\/Date\(","").replace("\)\/","")));
                        if (holidayDate.getTime() == calDate.getTime()) {
                            alert("HOLIDAY");
                            callback(true);
                        }
                        else
                        {
                            callback(false);
                        }
                    }
                 });
             }
函数isHoliday(日期、当前省份、回调){
var calDate=新日期(日期);
$.get(“@Url.Content(“~/Holidays/HolidayList/?province=”)”+currentProvince,函数(数据){

对于(h=0;h,函数在ajax调用完成之前返回;这就是
$.get
中的回调的目的,也是为什么它是异步的

如果您想从这个ajax调用中获得结果,那么您需要将其余的逻辑连接到这个调用的回调,如下所示:

function isHoliday(date,currentProvince, callback) {

                var calDate = new Date(date);
                $.get("@Url.Content("~/Holidays/HolidayList/?province=")"+currentProvince, function(data) {
                    for (h=0; h<data.length; h++) {
                        holidayDate= new Date(parseInt(data[h].date.replace("\/Date\(","").replace("\)\/","")));
                        if (holidayDate.getTime() == calDate.getTime()) {
                            alert("HOLIDAY");
                            callback(true);
                        }
                        else
                        {
                            callback(false);
                        }
                    }
                 });
             }
函数isHoliday(日期、当前省份、回调){
var calDate=新日期(日期);
$.get(“@Url.Content(“~/Holidays/HolidayList/?province=”)”+currentProvince,函数(数据){

对于(h=0;hhey look另一个“ajax是异步的”问题Hey look另一个“ajax是异步的”问题Kristian是对的。您需要返回所谓的承诺。下面是一个关于如何在jQuery中使用它们(和延迟)的问题。Kristian是对的。您需要返回所谓的承诺。下面是一个关于如何在jQuery中使用它们(和延迟)的问题。