jQuery запускает 2 обратных вызова после нажатия клавиши

#jquery #callback #keyboard-events #sequential

#jquery #обратный вызов #клавиатура-события #последовательный

Вопрос:

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

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

 function1
 function2

});
  

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

Загружает много

Ответ №1:

Поместите вторую функцию в обратный вызов метода 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);
});
  

Ответ №2:

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

  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
            }
        });
    }
      

Комментарии:

1. Спасибо тебе большое! Я решил свою проблему с помощью вашего второго решения. 😉

Ответ №3:

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