У меня есть функция javascript, у которой есть обратный вызов, затем анонимная функция, затем другой обратный вызов, и что-то не так с областью действия.Параметр callbackFunc
сохраняет свое значение из первого вызова функции и не использует новое значение, переданное во втором вызове функции.
function IsReady(callbackFunc) {
if (!IsValid()) return false;
IsConnected(function () {
if (typeof (callbackFunc) == 'function')
callbackFunc();
return true;
});
}
function IsConnected(validCallbackFunc) {
$.post("IsConnected", function (data) {
if (data.IsValid) {
if (validCallbackFunc && typeof (validCallbackFunc) == 'function')
validCallbackFunc();
}
});
}
$('#SaveButton').click(function () {
IsReady(SaveInvoice); // works
});
$('#ExportButton').click(function () {
// works only if IsConnected() is true
// otherwise SaveInvoice is called again
IsReady(ExportInvoice);
});
function SaveInvoice() {}
function ExportInvoice() {}
В некоторых случаях, когда я нажимаю кнопку ExportButton, вместо функции ExportInvoice запускается функция SaveInvoice.Я предполагаю, что это ограниченная проблема - что каким-то образом старое значение callbackFunc было сохранено.Но я не совсем понимаю это из-за смеси обратного вызова + анонимной функции + другого обратного вызова.Я не писал этот код, но я должен это исправить.Могу ли я что-нибудь сделать, чтобы очистить значение callbackFunc в конце IsReady ()?
IsReady (ExportInvoice) работает, если IsConnected () имеет значение true.Если IsConnected () имеет значение false, то результат заключается в том, что SaveInvoice () выполняется, когда на самом деле ничего не должно происходить (потому что он не подключен).