#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:
Есть два решения, в зависимости от того, что делают функции.
-
function1
не содержит асинхронных вызовов / кода:
просто поместите инструкции друг за другом:function1(); function2();
-
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
.