JQuery запускает 2 обратных вызова после keyup
У меня проблема с моим кодом. В частности, я хочу вызвать 2 обратного вызова после события keyup.
$('myDiv').keyup(function(){
function1
function2
});
Возможно ли ожидание загрузки первой функции (в function1
есть ли SQL-запросы, добавочные строки и т. д.) до начала следующей функции?
Большое спасибо
3 ответа
Есть два решения, в зависимости от того, что делают функции.
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 } }); }
Поместите вторую функцию в обратный вызов метода 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
,