jquery .when 不调用 .done 函数
jquery .when not calling the .done function
我正在尝试调用一个向用户显示模态 window 的函数。我想等待答案然后调用另一个函数来执行保存。我的初始函数正在被调用,但是done中的函数没有被调用。
我尝试过使用 settimeout 和 .then 到目前为止没有成功。
function _bindProviderSectionSave() {
//Provider Tab Save
copyProviderService = 0;
if (serviceProvider != $("#prov-service-prov").val() || serviceProviderSite != $("#prov-service-prov-site").val()) {
$.when(copyProvider()).done(function () {
saveProvider();
});
} else saveProvider();
}
function copyProvider() {
dfr = $.Deferred();
copyProviderService = 0;
app.showDecisionModal('Copy Service Provider to Service Lines', mg.ServiceProviderCopyWarning, 'Yes', 'No', function () {
copyProviderService = 1;
}, function () {
copyProviderService = 0;
}, d.close);
//return _copy;
return dfr.promise();
}
function saveProvider() {
//Provider Tab Save
var data = {};
data.AuthPlanHeaderId = g.AuthHeaderId;
data.RequestingProvider = $("#prov-requesting-provider").val();
data.RequestingProviderSite = $("#prov-requesting-prov-site").val();
data.RequestContactName = $("#prov-requesting-name").val();
data.RequestContactPhoneEmail = $("#prov-requesting-contact").val();
data.ServiceProvider = $("#prov-service-prov").val();
data.ServiceProviderSite = $("#prov-service-prov-site").val();
data.ServiceContactPhoneEmail = $("#prov-service-contact").val();
data.Facility = $("#prov-facilityId").val();
data.FacilitySite = $("#prov-facility-site").val();
data.FacilityContactPhoneEmail = $("#prov-facility-contact").val();
data.copyServices = copyProviderService;
let ajaxSettings = {
values: { data: data, userId: g.userId },
url: g.appPath + '/ServiceRequest/SaveSRReviewProviders'
};
app.ajax(ajaxSettings).done(function () {
_toggleTabButtons(providerTab, false);
_toggleControls(providerTab, false);
});
}
copyProvider 函数被调用,因为模态 window 正在呈现。但是,当我单击任一模式按钮时,它只会关闭 window 而不会继续执行 saveProvider 函数。
你调用 dfr.promise()
到 return 到 $.when()
,但你从未解决 done()
触发的承诺。
要解决此问题,请调用 drf.resolve()
并传递所需的值,如下所示。请注意,它具有消除对 copyProviderService
全局变量的需求的额外好处,因为值直接传递给所需的函数。
最后,正如@Bergi 所指出的,您根本不需要调用 $.when()
,因为 copyProvider()
return 本身就是一个承诺。试试这个:
function copyProvider() {
var dfr = $.Deferred();
app.showDecisionModal('Copy Service Provider to Service Lines', mg.ServiceProviderCopyWarning, 'Yes', 'No', function() {
dfr.resolve(1);
}, function() {
dfr.resolve(0);
}, d.close);
return dfr.promise();
}
function saveProvider(foo) {
console.log(foo); // 1 || 0
// .. the rest of your logic
}
copyProvider().done(function(value) {
saveProvider(value); // value is the 0 or 1 from the resolved promise.
});
我正在尝试调用一个向用户显示模态 window 的函数。我想等待答案然后调用另一个函数来执行保存。我的初始函数正在被调用,但是done中的函数没有被调用。
我尝试过使用 settimeout 和 .then 到目前为止没有成功。
function _bindProviderSectionSave() {
//Provider Tab Save
copyProviderService = 0;
if (serviceProvider != $("#prov-service-prov").val() || serviceProviderSite != $("#prov-service-prov-site").val()) {
$.when(copyProvider()).done(function () {
saveProvider();
});
} else saveProvider();
}
function copyProvider() {
dfr = $.Deferred();
copyProviderService = 0;
app.showDecisionModal('Copy Service Provider to Service Lines', mg.ServiceProviderCopyWarning, 'Yes', 'No', function () {
copyProviderService = 1;
}, function () {
copyProviderService = 0;
}, d.close);
//return _copy;
return dfr.promise();
}
function saveProvider() {
//Provider Tab Save
var data = {};
data.AuthPlanHeaderId = g.AuthHeaderId;
data.RequestingProvider = $("#prov-requesting-provider").val();
data.RequestingProviderSite = $("#prov-requesting-prov-site").val();
data.RequestContactName = $("#prov-requesting-name").val();
data.RequestContactPhoneEmail = $("#prov-requesting-contact").val();
data.ServiceProvider = $("#prov-service-prov").val();
data.ServiceProviderSite = $("#prov-service-prov-site").val();
data.ServiceContactPhoneEmail = $("#prov-service-contact").val();
data.Facility = $("#prov-facilityId").val();
data.FacilitySite = $("#prov-facility-site").val();
data.FacilityContactPhoneEmail = $("#prov-facility-contact").val();
data.copyServices = copyProviderService;
let ajaxSettings = {
values: { data: data, userId: g.userId },
url: g.appPath + '/ServiceRequest/SaveSRReviewProviders'
};
app.ajax(ajaxSettings).done(function () {
_toggleTabButtons(providerTab, false);
_toggleControls(providerTab, false);
});
}
copyProvider 函数被调用,因为模态 window 正在呈现。但是,当我单击任一模式按钮时,它只会关闭 window 而不会继续执行 saveProvider 函数。
你调用 dfr.promise()
到 return 到 $.when()
,但你从未解决 done()
触发的承诺。
要解决此问题,请调用 drf.resolve()
并传递所需的值,如下所示。请注意,它具有消除对 copyProviderService
全局变量的需求的额外好处,因为值直接传递给所需的函数。
最后,正如@Bergi 所指出的,您根本不需要调用 $.when()
,因为 copyProvider()
return 本身就是一个承诺。试试这个:
function copyProvider() {
var dfr = $.Deferred();
app.showDecisionModal('Copy Service Provider to Service Lines', mg.ServiceProviderCopyWarning, 'Yes', 'No', function() {
dfr.resolve(1);
}, function() {
dfr.resolve(0);
}, d.close);
return dfr.promise();
}
function saveProvider(foo) {
console.log(foo); // 1 || 0
// .. the rest of your logic
}
copyProvider().done(function(value) {
saveProvider(value); // value is the 0 or 1 from the resolved promise.
});