所以,我有两个函数,我希望第二个函数只在第一个函数完成后执行。
情况就是这样:
$('.link').on('click', function(e){
e.preventDefault();
function myLoopOne () {
console.log('first function executed');
}
function myLoop () {
console.log('second function executed');
}
myLoopOne(function(){
myLoop();
});
});
不幸的是,只执行第一个函数,并且不会调用回调函数myLoop()。
有谁能告诉我我做错了什么?
答案 0 :(得分:3)
您需要使用您提供给myLoopOne()
的函数的引用并调用它,如下所示:
$('.link').on('click', function(e) {
e.preventDefault();
function myLoopOne(callback) { // < receive the function reference
console.log('first function executed');
callback && callback(); // < call the referenced function, if one was provided
}
function myLoop() {
console.log('second function executed');
}
myLoopOne(function() {
myLoop();
});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="link">Click me</button>
&#13;
请注意,此模式仅适用于异步代码。如果您同步工作,这是多余的。
答案 1 :(得分:1)
试试这个,需要在调用另一个函数的函数内添加回调作为参数和方法调用。不仅是回调,您还可以将任何单词作为参数和方法调用传递。
$('.link').on('click', function(e) {
e.preventDefault();
myLoopOne(myLoop);
});
// need to add callback as a parameter and method call inside the function which call another function
function myLoopOne(callback) {
console.log('first function executed');
callback();
}
function myLoop() {
console.log('second function executed');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="link">Click me</button>