Вызывающая функция выполняется первой перед вызываемой функцией
Привет, на моей странице у меня есть текстовое поле. Пока пользователь вводит текст, срабатывает событие.
document.body.addEventListener('change', function ( event ) { if (event.srcElement.className == 'dynChange') { debugger; serailObject = {}; var keyString = event.srcElement.value; var txtId = event.srcElement.id; var isExist = isSerialExist(keyString); debugger; if(!isExist){ var result = licenseArray.filter(obj => { return obj.ID == itemId && obj.txtID == txtId }) if(result.length==0){ serailObject.ID = itemId; serailObject.license = keyString; serailObject.txtID =txtId; licenseArray.push(serailObject); } else{ for (var i = 0; i < licenseArray.length; i++) { if(licenseArray[i].ID == itemId && licenseArray[i].txtID == txtId){ licenseArray[i].license = keyString; } } } // assign this value in hidden field.. hdn_license.value = null; hdn_license.value = JSON.stringify(licenseArray); } else{ alert('serial already exist'); event.srcElement.value = ""; } } });
Как вы могли видеть я вызываю функцию
isSerialExist()
function isSerialExist(serial){ debugger var returnVal = false; var result = licenseArray.filter(obj => { return obj.license == serial }) if(result.length==0){ var IStockTransSvc = new WcfAjaxServices.IStockTransaction(); IStockTransSvc.IsSerialExist(serial, function (result, context, OnSuccess) { returnVal = result; }, function (error, context, OnError) { toastify("error", error, "System Error", "toast-bottom-right", true); }, null); } else{ return returnVal; } }
Примечание:- licenseArray : этот массив содержит все тексты, введенные пользователем.
Эта функция проверяет, есть ли уже такая же строка внутри licenseArray, если да, то возвращает false, а если нет, то вызывает службу wcf, чтобы проверить, представлена ли эта строка в базе данных.Но мой код течет вот так
Потоки кода..
1.Вызов функции
2.вызов службы, если строка отсутствует внутри licenseArray..
3.Перед назначением результата в returnVal он переходит в блок 3.
4.Затем он присваивает результат в returnVal.
Чего я хочу:
Я хочу, чтобы блок 4 был выполнен до блока 3. Чтобы я мог проверить это состояние,
if(!isExist){ // isExist undefined now.. //..... }
Что я уже пробовал:
Я попробовал то, что упоминается в моих вопросах..
Richard MacCutchan
Не добавляйте прослушиватель событий, пока не будете готовы к его обработке.
_jaws_
Тогда что мне нужно сделать, сэр?
Richard MacCutchan
То, что я тебе уже говорил. Если ваш обработчик событий запускается слишком рано, то вам нужно убедиться, что вы не добавляете его до тех пор, пока не будете готовы обрабатывать события.
_jaws_
Нет, сэр, это не проблема обработки событий..Пожалуйста, взгляните на изображение :)
https://i.ibb.co/nrGSs59/Untitled.png
Richard MacCutchan
Извините, но я изо всех сил стараюсь следовать этому кодексу. Я могу только предложить вам использовать ваш отладчик, чтобы следовать фактическому пути по мере его выполнения.