回调函数不会执行

时间:2017-01-10 12:01:54

标签: javascript jquery function callback

所以,我有两个函数,我希望第二个函数只在第一个函数完成后执行。

情况就是这样:

$('.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()。

有谁能告诉我我做错了什么?

2 个答案:

答案 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;
&#13;
&#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>