JQuery запускает 2 обратных вызова после keyup

У меня проблема с моим кодом. В частности, я хочу вызвать 2 обратного вызова после события keyup.

$('myDiv').keyup(function(){ 

 function1
 function2

});

Возможно ли ожидание загрузки первой функции (в function1 есть ли SQL-запросы, добавочные строки и т. д.) до начала следующей функции?

Большое спасибо

3 ответа

Решение

Есть два решения, в зависимости от того, что делают функции.

  1. function1 не содержит асинхронных вызовов / кода:
    Просто поместите утверждения друг за другом:

    function1();
    function2();
    
  2. function1 содержит асинхронные вызовы / код (я полагаю, это ваш случай)
    Тогда вы должны пройти function2 как обратный вызов function1 и позвони, когда function1 обрабатывает ответ:

    function1(function2);
    

    где function1 Например, как:

    function function1(cb) {
        $.ajax({ // asynchronous call
            //...
            success: function(data) {
                // response handled here
                cb(); // call the callback
            }
        });
    }
    

Поместите вторую функцию в обратный вызов метода ajax, например:

function first(cb) {
    // request something. Passed in function will execute
    // once the request has completed.
    $("#foo").load('/foo', cb);
}

function second() {
    // do something
}

$('myDiv').keyup(function(){ 
    first(second);
});

Javascript является однопоточным, он будет только оценивать function2 после function1 завершено. Однако, если вы делаете AJAX в function1 это не будет иметь место (AsynchronousJAX), вы можете обойти это, поместив вызов function2 в обработчике ответа на вызов AJAX в function1,

Другие вопросы по тегам