_jaws_ Ответов: 0

Вызывающая функция выполняется первой перед вызываемой функцией


Привет, на моей странице у меня есть текстовое поле. Пока пользователь вводит текст, срабатывает событие.

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

Извините, но я изо всех сил стараюсь следовать этому кодексу. Я могу только предложить вам использовать ваш отладчик, чтобы следовать фактическому пути по мере его выполнения.

0 Ответов