
[英]Calling the filter method on a JQuery object is not working when done inside of a function
[英]jquery .when not calling the .done function
我正在尝试调用向用户显示模式窗口的函数。 我想等待答案,然后调用另一个函数执行保存。 我的初始函数被调用,但完成的函数未被调用。
到目前为止,我还没有尝试使用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函数。 但是,当我单击任何一个模式按钮时,它只是关闭窗口,而不继续进行saveProvider函数。
您调用dfr.promise()
将其返回到$.when()
,但您从未解决过将done()
触发的承诺。
要解决此问题,请调用drf.resolve()
并传递所需的值,如下所示。 请注意,由于将值直接传递到所需的函数,因此它具有消除对copyProviderService
全局变量的需要的附加好处。
最后,正如@Bergi指出的那样,您根本不需要调用$.when()
copyProvider()
,因为copyProvider()
本身会返回一个promise。 尝试这个:
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.
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.